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)
结果只是图片中单个数据帧的数据,而不是两个数据帧的两个数据。请注意,只有两个数据帧的标题出现在同一张图片中,数据仅来自单个独立的数据帧。

pandas.merge或组合pandas.DataFrame.merge。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)
pandas.DataFrame.plot。
Casas显示。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)
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)
| 归档时间: |
|
| 查看次数: |
19132 次 |
| 最近记录: |