当前位置: 首页 > 知识库问答 >
问题:

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

蓬森
2023-03-14

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

这是两个非常小的数据帧,我想在同一个图中一起绘制。

数据帧是:

我想画一个像这样的图:

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

fig, ax = plt.subplots()

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

plt.show()

我也试过:

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()

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

共有2个答案

成和悌
2023-03-14

带有四个自定义颜色数据框和标题的图形

import pandas as pd


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]})


df16 = pd.merge(df12, df13, on='Zone')
df16 = pd.merge(df16, df14, on='Zone')
df16 = pd.merge(df16, df15, on='Zone')

fig, ax = plt.subplots(figsize=(50, 20))

#https://xkcd.com/color/rgb/
colors2 = ['#448ee4', '#a9f971','#ceb301','#ffb7ce']


#For all values to be displayed, even though these scales are different, the log scale is used.
df16.plot.bar(x='Zone', logy=True, color=colors2, ax=ax,width=0.5, align = 'center'); 


#legend
#https://stackoverflow.com/questions/19125722/adding-a-legend-to-pyplot-in-matplotlib-in-the-most-simple-manner-possible
plt.gca().legend(('Total Resident Population-2017', 
                  'Median Value of square meter-Dollars US', 
                  'HDI- Human Development Index-2010',
                  'Number of new housing properties-2018'),bbox_to_anchor=(0.87, 0.89) ,fontsize=28)


plt.title('Estimated Resident Population, Average value of square meter, HDI, New housing properties in São Paulo - Brazil',fontsize=40)
plt.xlabel ('Names of the geographical subdivisions of São Paulo',fontsize=40)
plt.ylabel('Log Scale', fontsize=30)

#change the name of month on the x 
ax = plt.gca()
names = ['Zone: Center', 'Zone: East', 'Zone: North', 'Zone: West', 'Zone: South']
ax.set_xticklabels(names,fontsize=40)
x = plt.gca().xaxis



plt.rcParams['ytick.labelsize'] = 30

# rotate the tick labels for the x axis
for item in x.get_ticklabels():
    item.set_rotation(0)    

for spine in plt.gca().spines.values():
    spine.set_visible(False)

# remove all the ticks (both axes), and tick labels on the Y axis
plt.tick_params(top='off', bottom='off', left='off', right='off', labelleft='on', labelbottom='on')



# direct label each bar with Y axis values
for p in ax.patches[0:]:
    plt.gca().text(p.get_x() + p.get_width()/2, p.get_height()+0.01, str(float(p.get_height())), 
                 ha='center', va='baseline', rotation=0 ,color='black', fontsize=25)



plt.show()


fig.savefig('GraficoMultiplo.jpg')
锺离刚洁
2023-03-14
  • 为了创建分组条形图,数据帧必须与熊猫组合。合并熊猫。数据帧。合并
  • 请参见熊猫用户指南:合并、连接、连接和比较等:熊猫合并101
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]}) 
  • 使用熊猫。合并,合并数据帧
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
  • pandas绘制数据帧。数据帧。绘图
    • 使用Casas的对数刻度显示
    df.plot.bar(x='Zone', logy=True)
    plt.xticks(rotation=0)
    plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
    plt.show()
    

    • OP在提供该答案后,在答案中添加了额外数据
    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
    df.plot.bar(logy=True, figsize=(8, 6))
    plt.xticks(rotation=0)
    plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
    plt.show()
    

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

 类似资料:
  • 问题内容: 这是我的pandas数据帧’df’: I want to plot 3 groups of bar chart (according to ): for each channel: plot control booked value vs treatment booked value. hence i should get 6 bar charts, in 3 groups where

  • 我有一个初始数据帧 。我从中提取两个数据帧,如下所示: 我想将< code>A和< code>B组合成一个数据帧。数据的顺序并不重要。但是,当我们对来自< code>D的< code>A和< code>B进行采样时,它们会保留来自< code>D的索引。

  • 我正在制作一个类似飞鸟的飞机游戏,在一个类中,我有移动的背景,然后我将其添加到主jPanel中,它在自己的类中,在另一个类中,我有玩家,我将其添加到主jPanel中。但是,当我将第二个类添加到JPanel时,我添加的第一个类将消失。这是我的背景课: 这是我的平面类:导入java.awt.图形;导入java.awt.event.动作事件;导入java.awt.event.动作监听器;导入java.a

  • 我遇到了一个关于Python中matplotlib的棘手问题。我想用几个代码创建一个分组条形图,但是图表出错了。你能给我一些建议吗?代码如下。 这个代码模块的输出真是一团糟。但我所期望的应该像图中的条形图。你能告诉我代码中哪一点不正确吗?

  • 问题内容: 我正在尝试构建 Paint 应用程序,并且在DrawingArea类中做错了什么。问题是当我尝试绘制第二个形状时,第一个形状或图形是自动删除的,因此我需要一些解决方法的想法。所有答案都可以接受。感谢帮助。 有部分 DrawingArea.class 代码: 问题答案: 您需要: 将要绘制的形状存储在列表中,然后在paintComponent()方法中绘制列表中的所有形状,或者 将形状绘

  • 我有来自不同板上多个器件的温度数据,例如,在板1上,我有PCB本身和3个不同FET的温度,同样地,板2和3也有温度。我将数据读入一个dataframe,并希望用相同的颜色为每个测试板绘制数据,但用不同的标记为板上的每个设备绘制数据。例如,板1的所有测量值都是蓝色的,PCB温度使用标记'+',FET1使用标记'V'等。 我像这样读取文件: 并创建一个数组。 然后我绘制不同的列: 编辑 在@ilke4