【问题标题】:Pandas plot bar chart over line熊猫在线条上绘制条形图
【发布时间】:2021-06-16 09:20:24
【问题描述】:

我正在尝试在同一张图上绘制一个条形图和一条线形图。这是有效的和无效的。有人能解释一下为什么吗?

什么不起作用:

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)

【问题讨论】:

标签: python pandas matplotlib


【解决方案1】:

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

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

【讨论】:

  • 我觉得我也是靠运气才能做到的,这就是我发布这个问题的原因。解释很清楚,解决方案解决了我任务中几个相关问题的问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-06-07
  • 2018-10-15
  • 2022-01-20
  • 1970-01-01
  • 2018-05-16
相关资源
最近更新 更多