Python中的Matplotlib分组数据聚集条形图

Python中的Matplotlib分组数据聚集条形图,python,pandas,matplotlib,Python,Pandas,Matplotlib,我有一本价值观词典(drug),如下所示: {0: {0: 100.0, 1: 0.41249706379061035, 2: 5.144449764434768, 3: 31.078456871927678}, 1: {0: 100.0, 1: 0.6688801420346955, 2: 77.32360971119694, 3: 78.15132480853421}, 2: {0: 100.0, 1: 136.01949766418852, 2: 163.4967732211563, 3:

我有一本价值观词典(
drug
),如下所示:

{0: {0: 100.0, 1: 0.41249706379061035, 2: 5.144449764434768, 3: 31.078456871927678}, 1: {0: 100.0, 1: 0.6688801420346955, 2: 77.32360971119694, 3: 78.15132480853421}, 2: {0: 100.0, 1: 136.01949766418852, 2: 163.4967732211563, 3: 146.7726208999281}}
它包含3种药物类型,然后该药物类型在4种不同浓度下的疗效

我试图制作一个聚集条形图,将3种药物相互比较如下:

目前,我的代码如下:

fig,ax=plt.subplot()
宽度=0.35
ind=np.arange(3)
对于范围(3)内的x:
ax.bar(ind+(width*x),drug[x].values(),width,bottom=0)
ax.集合标题(“药物疗效”)
最大设置宽度(ind+width/2)
ax.set\u xticklabels(列表(string.ascii\u大写[0:drugCount]))
ax.自动缩放视图()
plt.show()
我已经修改了指南中的代码,但遇到了多个问题

我认为主要原因是示例中使用的数据是一组中的值对应于相同的颜色,而不是相同的簇


我如何调整此代码,使其能够绘制出每种药物在4种不同浓度下与其他药物相比的疗效?

IIUC您想按列标准化您的值,可以使用
sklearn

from sklearn import preprocessing

df = pd.DataFrame(drug)
scaler = preprocessing.MinMaxScaler()
df = pd.DataFrame(scaler.fit_transform(df))
df.T.plot(kind="bar")
plt.show()

试试
pd.DataFrame.from_dict(drug_dict,orient='index').plot.bar()
?谢谢你的回复,我会试试看-你知道为什么在这种情况下0不显示为100,而药物2显示为100吗?我不确定我是否正确地得到了它,但当你将值标准化为0-1时,最低值变为0。因此,在药物2中,第一个变为0。