我有一个DataFrame看起来像这样:
amount price
age
A 40929 4066443
B 93904 9611272
C 188349 19360005
D 248438 24335536
E 205622 18888604
F 140173 12580900
G 76243 6751731
H 36859 3418329
I 29304 2758928
J 39768 3201269
K 30350 2867059
现在我想画一个条形图,X轴上的年龄作为标签。对于每个x刻度应该有两个条形,一个条形代表金额,一个条形代表价格。我可以通过简单地使用它来实现这个工作:
df.plot(kind='bar')
问题是缩放。价格高得多,我无法真正确定图表中的金额,请参阅:
所以我想要第二个y轴。我试着用:
df.loc[:,'amount'].plot(kind='bar')
df.loc[:,'price'].plot(kind='bar',secondary_y=True)
但这只是覆盖了条形图,并没有将它们并排放置。有没有什么方法可以在不访问底层matplotlib的情况下做到这一点(这显然可以通过手动并排放置条形图)?
现在,我在子图中使用两个单独的图:
df.plot(kind='bar',grid=True,subplots=True,sharex=True);
导致:
4条答案
按热度按时间nwlls2ji1#
使用新的pandas版本(0.14.0或更高版本),下面的代码将工作。为了创建两个轴,我手动创建了两个matplotlib轴对象(
ax
和ax2
),它们将用于两个条形图。打印Dataframe时,可以使用
ax=...
选择轴对象。另外,为了防止两个图重叠,我修改了它们与position
关键字参数对齐的位置,默认为0.5
,但这意味着两个条形图重叠。utugiqy62#
你只需要写:df.plot(kind= 'bar',secondary_y= ' amount ')
ccgok5k53#
下面是另一个方法:
transform
属性将一些条移动到右边的坐标轴代码如下:
下面是输出:
pqwbnv8z4#
正如InLaw所提到的,你应该使用
secondary_y = 'amount'
在这里补充他的答案是如何为两个轴设置ylabels: