如何从两个或多个数据帧绘制分组条形图

Giz*_*lly 4 python matplotlib bar-chart pandas grouped-bar-chart

我有多个数据框,我想将它们绘制在分组条形图视图中的同一个图形上。

这是两个非常小的数据框,我想将它们绘制在同一张图中。

数据框是:

我的数据框

我想绘制一个像这样的例子的图:

我想要的例子

我尝试这样做,只绘制一张图:

fig, ax = plt.subplots()

df1.plot.bar(x='Zona',y='Total_MSP')
df4.plot.bar(x='Zona',y='NumEstCasasFavelas2017',ax=ax)

plt.show()
Run Code Online (Sandbox Code Playgroud)

我也尝试过这个:

fig, ax = plt.subplots()

df1.plot.bar(x='Zona',y='Total_MSP',ax=ax)
df4.plot.bar(x='Zona',y='NumEstCasasFavelas2017',ax=ax)

plt.show()
Run Code Online (Sandbox Code Playgroud)

结果只是图片中单个数据帧的数据,而不是两个数据帧的两个数据。请注意,只有两个数据帧的标题出现在同一张图片中,数据仅来自单个独立的数据帧。

我的失败

Tre*_*ney 6

数据:

import pandas as pd
import matplotlib.pyplot as plt

df1 = pd.DataFrame({'Zone': ['C', 'L', 'N', 'O', 'S'],
                    'Total_MSP': [464245, 3764942, 1877505, 1023160, 3179477]})
df2 = pd.DataFrame({'Zone': ['C', 'L', 'N', 'O', 'S'],
                    'CasasFavelas_2017': [463, 4228, 851, 1802, 2060]}) 
Run Code Online (Sandbox Code Playgroud)

合并数据框:

  • 使用pandas.merge组合 DataFrame。
df = pd.merge(df1, df2, on='Zone')

  Zone  Total_MSP  CasasFavelas_2017
0    C     464245                463
1    L    3764942               4228
2    N    1877505                851
3    O    1023160               1802
4    S    3179477               2060
Run Code Online (Sandbox Code Playgroud)

阴谋:

ax = df.plot(kind='bar', x='Zone', logy=True, rot=0)
ax.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

更新:

  • 在提供此答案后,OP 在答案中添加了额外的数据。
  • 用于pandas.concat组合 2 个以上的 DataFrame。
df12 = pd.DataFrame({'Zone': ['C', 'L', 'N', 'O', 'S'], 'Total_MSP': [464245, 3764942, 1877505, 1023160, 3179477]})
df13 = pd.DataFrame({'Zone': ['C', 'L', 'N', 'O', 'S'], 'ValorMedioDollar': [1852.27, 1291.53, 1603.44, 2095.90, 1990.10]})
df14 = pd.DataFrame({'Zone': ['C', 'L', 'N', 'O', 'S'], 'IDH2010': [0.89, 0.70, 0.79, 0.90, 0.80]})
df15 = pd.DataFrame({'Zone': ['C', 'L', 'N', 'O', 'S'], 'QtdNovasCasas': [96,1387, 561, 281, 416]})

# use concat to combine more than two DataFrames
df = pd.concat([df12.set_index('Zone'), df13.set_index('Zone'), df14.set_index('Zone'), df15.set_index('Zone')], axis=1)

      Total_MSP  ValorMedioDollar  IDH2010  QtdNovasCasas
Zone                                                     
C        464245           1852.27     0.89             96
L       3764942           1291.53     0.70           1387
N       1877505           1603.44     0.79            561
O       1023160           2095.90     0.90            281
S       3179477           1990.10     0.80            416

# plot the DataFrame
ax = df.plot(kind='bar', logy=True, figsize=(8, 6), rot=0)
ax.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

添加注释:

  • 不是原始问题的一部分。
  1. 如何绘制和注释分组条形图
  2. 如何绘制字典