我已经以不同的面貌多次陷入这个熊猫陷阱。在这种情况下,我想使用两个独立数据帧中的数据绘制两个条形图,一个在另一个之上,但每个图都有一个公共的x轴。
我有两个数据框,如下所示:
dfA = pd.DataFrame({'year':[2003,2004,2005,2006,2007],
'value':[75,84,95,101,119]})
dfA = dfA.set_index('year')
dfB = pd.DataFrame({'year':[2000,2001,2002,2003,2004,2005],
'value':[34,46,64,71,88,93]})
dfB = dfB.set_index('year')
数据框显示为:
value
year
2003 75
2004 84
2005 95
2006 101
2007 119
value
year
2000 34
2001 46
2002 64
2003 71
2004 88
2005 93
然后我尝试按以下方式绘制图形:
fig, axarr = plt.subplots(2,
figsize = (4,6),
sharex = True)
dfA['value'].plot(kind = 'bar',
ax = axarr[0],
sharex = True,
title = 'DF A')
dfB['value'].plot(kind = 'bar',
ax = axarr[1],
sharex = True,
title = 'DF B')
plt.show()
生成的图形显示正确的钢筋高度,但是x轴显然没有共享,而是条形似乎是一个接一个地绘制,并与左手栏对齐; x轴使用的标签只是底部图中的标签。
一种解决方法是外部连接两个数据框,然后绘制每列。 (在反思中,此解决方案与Plotting Pandas data as an array of bar chart does not honour sharex = True处的#gyx-hh给出的答案类似。)外部连接数据帧有效,但无论是否设置了sharex = True
,它都有效,因为完整的值集为每个数据集都存在,即使某些单元格可能包含NaN。
dfC = dfA.join(dfB,
how = 'outer',
lsuffix = '_A',
rsuffix = '_B')
value_A value_B
year
2000 NaN 34.0
2001 NaN 46.0
2002 NaN 64.0
2003 75.0 71.0
2004 84.0 88.0
2005 95.0 93.0
2006 101.0 NaN
2007 119.0 NaN
我真的很喜欢pandas.plot()
方法,但是对我来说,这是一个非常严重的故障,可能导致数据被误解。应该将其作为熊猫团队的错误来提出吗?还是有这种行为可取的原因?