gpt4 book ai didi

python - 将单独的 Pandas 数据框绘制为具有共享 x 轴的条形图

转载 作者:行者123 更新时间:2023-12-01 08:20:53 24 4
gpt4 key购买 nike

我曾多次以不同的方式陷入这个 Pandas 陷阱。这次,我想使用来自两个单独数据帧的数据绘制两个条形图,一个在另一个之上,但每个图都有一个共同的 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 轴的标签只是底部图中的标签。 Bar-plots from different dataframes

解决这个问题的一种方法是外部连接两个数据框,然后绘制每一列。 (经过反射(reflection),此解决方案类似于 #gyx-hh 在 Plotting Pandas data as an array of bar chart does not honour sharex = True 给出的答案。)外部连接数据帧有效,但无论是否设置 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

Bar-plot with correct x axis

我真的很喜欢 pandas.plot() 方法,但对我来说,这是一个非常严重的故障,可能会导致数据被误解。这是否应该作为 pandas 团队的错误提出,或者是否有理由认为这种行为更可取?

最佳答案

为了验证您的观察,我认为这很困惑。

对齐

这本质上与您的加入做同样的事情。

fig, axarr = plt.subplots(2, figsize=(4,6), sharex=True)

# vvv Thing I Added vvv
dfA, dfB = dfA.align(dfB, axis=0)

dfA['value'].plot.bar(ax=axarr[0], title='DF A')
dfB['value'].plot.bar(ax=axarr[1], title='DF A')

enter image description here

关于python - 将单独的 Pandas 数据框绘制为具有共享 x 轴的条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54655084/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com