如何在同一图中绘制三个直方图,每个直方图代表一定范围的值?

2024-04-26 17:45:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我是新来的。我在以前的帖子里找了很久我的答案,但没有一个答案能完全解决我的问题。 我读了以下链接中的帖子

Multiple Histograms, each for a label of x-axis, on the same graph matplotlib

Plot two histograms at the same time with matplotlib

还有很多其他的,但是什么都没有

所以,我决定问你我的问题。 我有两个这样的概率数组(为简单起见,我报告了两个小列表): a=[0.1、0.2、0.4、0.56、0.67、0.70、0.89、0.90] b=[0.15、0.22、0.41、0.47、0.45、0.59、0.66、0.75、0.83、0.99]

我必须创建一个直方图,它表示由两个条组成的三组条(一个用于数组a,另一个用于数组b)

第一组条形图必须表示介于0.0(包括)和0.4(排除)之间的数组值,第二组条形图必须表示介于0.4(包括)和0.65(排除)之间的数组值,最后一组条形图必须表示其余的值。 在y轴上,我更喜欢相对频率(而不是绝对频率)。
我应该得到这样的https://ibb.co/41BdCCP(我在https://plot.ly/python/bar-charts/中找到的),但是很明显,在x轴上我会得到值的范围(而不是动物的名字),在y轴上我会得到相对频率(就像我以前写的)

非常感谢,希望有人能解决我的问题


Tags: the答案httpsformatplotlib链接数组multiple
1条回答
网友
1楼 · 发布于 2024-04-26 17:45:15

我不知道你们到底想要什么:条形图还是柱状图。但根据你的问题,这里有一个柱状图:

这里我使用一个掩码来定义要绘制的组。你可以根据自己的问题调整解决方案。例如,我创建了一些测试数组

a = np.array([0.04, 0.09,0.1, 0.12, 0.2, 0.4, 0.42, 0.44, 0.47, 0.5, 0.53,0.56, 0.67, 0.70, 0.75, 0.76, 0.78, 0.79, 0.89, 0.90] )
b = np.array([0.05, 0.08, 0.15,0.12, 0.22, 0.41, 0.43, 0.44, 0.46, 0.47, 0.45, 0.51, 0.54,0.59, 0.66, 0.75, 0.75, 0.76, 0.77, 0.8, 0.83, 0.99])

lim = [0, 0.4, 0.65, 1]
for i in range(len(lim)-1):
    plt.hist(a[(a>=lim[i]) & (a<lim[i+1])], color='r')
    plt.hist(b[(b>=lim[i]) & (b<lim[i+1])], color='b')

enter image description here

相关问题 更多 >