熊猫情节条形图在线

时间:2017-04-14 20:32:16

标签: python pandas matplotlib

我正在尝试在同一个图表上绘制一个条形和一条线。这是有效的,有效的是什么。请问有谁解释原因?

什么行不通:

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)

enter image description here

但是当我在第一个图中删除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)

enter image description here

1 个答案:

答案 0 :(得分:5)

主要问题是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)

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

enter image description here