【问题标题】:Plot 2 pandas dataframes with same columns绘制具有相同列的 2 个熊猫数据框
【发布时间】:2020-09-21 13:19:21
【问题描述】:

我有 2 个长度相同且列名相同的 pandas 数据框。我想循环遍历列并将列相互绘制 - df1 中的 column1 与 df2 中的 col1 对比。我想要条形图

df1:

   A  B  C
1  0  4  8
2  5  6  9
3  2  5  1

df2:

   A  B  C
1  9  4  5
2  1  4  2
3  5  5  1

【问题讨论】:

标签: python pandas matplotlib


【解决方案1】:

也许像下面这样,不太清楚你所说的一个对另一个的条形图是什么意思,我并排绘制了每个现在

df1=pd.DataFrame({'A':[0,5,2],'B':[4,6,5],'C':[8,9,1]})
df2=pd.DataFrame({'A':[9,1,5],'B':[4,4,5],'C':[5,2,1]})

fig,ax = plt.subplots(1,3,figsize=(8,5))
x1 = [i-0.1 for i in range(len(df1))]
x2 = [i+0.1 for i in range(len(df2))]
for i,col in enumerate(df1.columns):
    ax[i].bar(x=x1,height=df1[col],width=0.2,label="df1")
    ax[i].bar(x=x2,height=df2[col],width=0.2,label="df2")
    ax[i].legend()

【讨论】:

    【解决方案2】:

    称为分组条形图/聚集条形图/多系列条形图

    如果我明白了你所说的要点,那么这里就是你想要的最简单的方法。

    创建您提到的数据框:

    df1 = pd.DataFrame(np.array([[0, 4, 8], [5, 6, 9], [2, 5, 1]]), columns=['a', 'b', 'c'])
    df2 = pd.DataFrame(np.array([[9, 4, 5], [1, 4, 2], [5, 5, 1]]), columns=['a', 'b', 'c'])
    

    将它们堆叠在一起(如果索引不重要,请在 append 方法中使用 ignore_index=True 选项):

    combined = df1.append(df2)
    

    由于您要绘制列,因此首先需要将它们作为行,因为默认情况下,DataFrame.plot 以行作为 X 轴进行绘图。

    为了让它们成为行,我们按如下方式转置,就是这样。

    combined.transpose().plot(kind='bar')
    

    combined.T.plot(kind='bar')
    

    剧情如下: Cluster bar chart

    【讨论】:

    • 如果你想要单行:df1.append(df2).transpose().plot(kind='bar')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    • 2017-06-09
    • 2020-04-28
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 2016-08-12
    相关资源
    最近更新 更多