如何在 matplotlib pandas 的一张图中组合两个文件的两个条形图
Posted
技术标签:
【中文标题】如何在 matplotlib pandas 的一张图中组合两个文件的两个条形图【英文标题】:how to combine two bar chart of two files in one diagram in matplotlib pandas 【发布时间】:2018-11-27 11:56:25 【问题描述】:我有两个具有相同列但内容不同的数据框。
我已经绘制了dffinal data frame
。现在我想在同一张图上绘制另一个数据框dffinal_no
以进行比较。
例如blue colour
中的一个条形图,以及带有另一种颜色的相同条形图只是differentiating in y-axis
。
这是我绘制第一个数据框的代码的一部分。
dffinal = df[['6month','final-formula','numPatients6month']].drop_duplicates().sort_values(['6month'])
ax=dffinal.plot(kind='bar',x='6month', y='final-formula')
import matplotlib.pyplot as plt
ax2 = ax.twinx()
dffinal.plot(ax=ax2,x='6month', y='numPatients6month')
plt.show()
现在假设我有另一个具有相同列的 dffinal_no
数据框,我如何将它绘制在同一张图中?
这是我绘制的第一张图表,我希望这张图表上的另一个条形图带有另一种颜色。
所以@Mohamed Thasin ah 的答案是我想要的,除了右 y 轴不正确。
我希望both data frame
基于(6month, final-formula)
,但右侧的y-axis
只是显示患者数量,作为用户信息。
其实我DO NOT
希望第一个df基于final-fomula
,第二个df基于NumberPatients
。
Update1 作为参考,它看起来像我的数据框
dffinal = df[['6month','final-formula','numPatients6month']].drop_duplicates().sort_values(['6month'])
nocidffinal = nocidf[['6month','final-formula','numPatients6month']].drop_duplicates().sort_values(['6month'])
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax2 = ax1.twinx()
ax1.set_ylabel('final-formula')
ax2.set_ylabel('numPatients6month')
width=0.4
nocidffinal=nocidffinal.set_index('6month').sort_index()
dffinal=dffinal.set_index('6month').sort_index()
nocidffinal['final-formula'].plot(kind='bar',color='green',ax=ax1,width=width,position=0)
dffinal['numPatients6month'].plot(kind='bar',color='red',ax=ax2,width=width,position=1)
dffinal content
,6month,final-formula,numPatients6month
166047.0,1,7.794117647058823,680
82972.0,2,5.720823798627003,437
107227.0,3,5.734767025089606,558
111330.0,4,4.838709677419355,434
95591.0,5,3.3707865168539324,534
95809.0,6,3.611738148984198,443
98662.0,7,3.5523978685612785,563
192668.0,8,2.9978586723768736,467
89460.0,9,0.9708737864077669,515
192585.0,10,2.1653543307086616,508
184325.0,11,1.727447216890595,521
85068.0,12,1.0438413361169103,479
nocidffinal
,6month,final-formula,numPatients6month
137797.0,1,3.5934291581108826,974
267492.0,2,2.1705426356589146,645
269542.0,3,2.2106631989596877,769
271950.0,4,2.0,650
276638.0,5,1.5587529976019185,834
187719.0,6,1.9461077844311379,668
218512.0,7,1.1406844106463878,789
199830.0,8,0.8862629246676514,677
269469.0,9,0.3807106598984772,788
293390.0,10,0.9668508287292817,724
254783.0,11,1.2195121951219512,738
300974.0,12,0.9695290858725761,722
【问题讨论】:
***.com/questions/32280490/… 感谢您的回复,实际上与我的情况相比,它非常简单。但我会试一试,让你知道:) @inspired_learner 感谢您的回复,遗憾的是我无法将该示例应用于我的案例。我的是熊猫,我已经有两个轴了。如果您需要更多信息,请告诉我。为响应欢呼 【参考方案1】:要将两个数据框结果与条形图进行比较,您可以尝试的一种方法是连接两个数据框并添加hue
。
例如,考虑下面的 df,它在两个 df 中都包含相同的 x 和 y 列,并且想要比较这个值。要实现这一点,只需为每个具有微分常数的 df 添加色调列,如下所示。
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
df1=pd.DataFrame('x':[1,2,3,4,5],'y':[10,2,454,121,34])
df2=pd.DataFrame('x':[4,1,2,5,3],'y':[54,12,65,12,8])
df1['hue']=1
df2['hue']=2
res=pd.concat([df1,df2])
sns.barplot(x='x',y='y',data=res,hue='hue')
plt.show()
结果应如下所示:
要获得两个y轴试试这个方法,
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax2 = ax1.twinx()
ax1.set_ylabel('final-formula')
ax2.set_ylabel('numPatients6month')
width=0.4
df1=df1.set_index('x').sort_index()
df2=df2.set_index('x').sort_index()
df1['y'].plot(kind='bar',color='blue',ax=ax1,width=width,position=1)
df2['y'].plot(kind='bar',color='green',ax=ax2,width=width,position=0)
plt.show()
实际输入:
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax2 = ax1.twinx()
ax1.set_ylabel('final-formula')
ax2.set_ylabel('numPatients6month')
width=0.4
df1=df1.set_index('6month').sort_index()
df2=df2.set_index('6month').sort_index()
df1['final-formula'].plot(kind='bar',color='blue',ax=ax1,width=width,position=1)
df2['numPatients6month'].plot(kind='bar',color='green',ax=ax2,width=width,position=0)
plt.show()
【讨论】:
让我们continue this discussion in chat。 虽然您的回答确实对我有所帮助,但我仍然需要它,它应该同时具有两个 y 轴。所以我将您的答案取消标记为所需的答案,希望有人帮助我完成这部分 我明白了,谢谢。但是我认为不可能有正确的 y 轴,因为我正在解释比率,10/1000 与 1/100 相同,所以如果根据左 y 轴,两个条形图相同,它们可能不是右边一样,所以我改变主意在每个条形上方显示每个患者数量,这可能吗?以上是关于如何在 matplotlib pandas 的一张图中组合两个文件的两个条形图的主要内容,如果未能解决你的问题,请参考以下文章