繁体   English   中英

熊猫在线条上绘制条形图

[英]Pandas plot bar chart over line

我试图在同一张图上绘制一条条和一条线。 这是有效的和无效的。 有没有人请解释一下为什么?

什么不起作用:

df = pd.DataFrame({'year':[2001,2002,2003,2004,2005], 'value':[100,200,300,400,500]})
df['value1']= df['value']*0.4
df['value2'] = df['value']*0.6
fig, ax = plt.subplots(figsize = (15,8))
df.plot(x = ['year'], y = ['value'], kind = 'line', ax = ax)
df.plot(x = ['year'], y= ['value1','value2'], kind = 'bar', ax = ax)

在此处输入图片说明

但是当我删除第一个图中的x=['year']时,它以某种方式起作用:

fig, ax = plt.subplots(figsize = (15,8))
df.plot(y = ['value'], kind = 'line', ax = ax)
df.plot(x = ['year'], y= ['value1','value2'], kind = 'bar', ax = ax)

在此处输入图片说明

主要问题是kind="line" kinds="bar"在 x 轴的低端绘制条形图(所以 2001 实际上是 0),而kind="line"根据给定的值绘制它。 删除x=["year"]只是让它根据顺序绘制值(幸运的是,它与您的数据精确匹配)。

可能有更好的方法,但我所知道的最快方法是停止将年份视为一个数字。

df = pd.DataFrame({'year':[2001,2002,2003,2004,2005], 'value':[100,200,300,400,500]})
df['value1']= df['value']*0.4
df['value2'] = df['value']*0.6
df['year'] = df['year'].astype("string") # Let them be strings!
fig, ax = plt.subplots(figsize = (15,8))
df.plot(x = ['year'], y = ['value'], kind = 'line', ax = ax)
df.plot(x = ['year'], y= ['value1','value2'], kind = 'bar', ax = ax)

以这种方式处理年份是有道理的,因为无论如何您都将年份视为分类数据,并且字母顺序与数字顺序相匹配。

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM