我尝试使用不同的颜色表示iris数据集条形图中不同种类的物种,但所有颜色在图表The bar graph的每个条形上都重叠
我用这个密码
fig,axes=plt.subplots(2,2,figsize=(8,8))
c=['red','green','orange']
axes[0,0].set_title('Sepal Length')
axes[0,0].bar(df['Species'],df['SepalLengthCm'],color=c)
axes[0,1].set_title('Sepal Width')
axes[0,1].bar(df['Species'],df['SepalWidthCm'],color=c)
axes[1,0].set_title('Petal Length')
axes[1,0].bar(df['Species'],df['PetalLengthCm'],color=c)
axes[1,1].set_title('Petal Width')
axes[1,1].bar(df['Species'],df['PetalWidthCm'],color=c)
plt.show()
2条答案
按热度按时间mnemlml81#
下面的代码试图解释你的原始代码中发生了什么,为了避免过度拥挤,它使用了虹膜数据集的30个随机行。
df['species']
是种类列,包含值['versicolor', 'setosa', 'setosa', 'virginica', 'versicolor', 'versicolor', 'setosa', 'virginica', 'setosa', 'virginica', ...]
。df['sepal_length']
包含[6.4, 5.5, 4.7, 6.7, 5.8, 5.6, 4.8, 7.1, 5.8, 6.7, ...]
。然后
ax.bar(df['species'], df['sepal_length'], color=c)
将创建30(在此示例中)条。一个用于df['species']
、versicolor
中的第一个,高度为6.4
。然后一个用于setosa
,高度为5.5
。然后再次用于setosa
,高度为4.7
。由于使用了相同的x值,这条会被画在另一条的上面。2颜色不会与物种相对应,它们只是在每一行重复的3种颜色。使用索引来定位条形图,然后根据物种来想象所有这些条形图的叠加,这样看起来会更容易。
zysjyyx42#
正如@JohanC在评论中所建议的那样,我建议使用Seaborn
barplot
,但如果您只想使用Matplotlib,您可以执行以下操作(注意,这里假设您希望在每种情况下绘制平均值):默认情况下,Seaborn
barplot
会计算平均值,并根据数据的标准差添加误差线。这可以在Matplotlib中使用以下命令完成: