如何在matplotlib pandas中将两个文件的两个条形图组合在一张图中

sar*_*iii 2 group-by matplotlib data-analysis dataframe pandas

我有两个具有相同列但内容不同的数据框。我已经策划了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()
Run Code Online (Sandbox Code Playgroud)

现在想象我有另一个dffinal_no具有相同列的数据框,我如何在同一个图表中绘制它?

这是我绘制的第一个图表,我希望该图表上的另一个条形图使用另一种颜色。

在此处输入图片说明

所以@Mohamed Thasin ah 的答案在某种程度上是我想要的,除了正确的 y 轴不正确。

我想both data frame基于(6month, final-formula)但右边y-axis只是显示患者数量,作为用户的信息。

实际上,我DO NOT希望第一个 df 基于,final-fomula第二个 df 基于NumberPatients.

Update1 jast 作为参考它看起来像我的数据框

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
Run Code Online (Sandbox Code Playgroud)

Moh*_* ah 6

将两个数据框结果与条形图进行比较,您可以尝试的一种方法是连接两个数据框并添加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()
Run Code Online (Sandbox Code Playgroud)

结果应如下所示:

在此处输入图片说明

要获得两个 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()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

实际输入:

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()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明