import matplotlib.pyplot as plt
data = [0, 0, 1, 2, 3, 4, 5, 6, 35, 60, 61, 82, -3] # your data here
fig, axes = plt.subplots(1,3, sharey=True, width_ratios=[1, 12, 1])
fig.subplots_adjust(wspace=0)
# counting 0 values and drawing a bar between -5 and 0
axes[0].bar(-5, data.count(0), width=5, align='edge')
axes[0].xaxis.set_visible(False)
axes[0].spines['right'].set_visible(False)
axes[0].set_xlim((-5, 0))
# histogram between (0, 60]
axes[1].hist(data, bins=12, range=(0.0001, 60.0001))
axes[1].yaxis.set_visible(False)
axes[1].spines['left'].set_visible(False)
axes[1].spines['right'].set_visible(False)
axes[1].set_xlim((0, 60))
# counting values > 60 and drawing a bar between 60 and 65
axes[2].bar(60, len([x for x in data if x > 60]), width=5, align='edge')
axes[2].xaxis.set_visible(False)
axes[2].yaxis.set_visible(False)
axes[2].spines['left'].set_visible(False)
axes[2].set_xlim((60, 65))
plt.show()
输出:
编辑:如果你想绘制概率密度图,我可以编辑数据并简单地使用hist:
import matplotlib.pyplot as plt
data = [0, 0, 1, 2, 3, 4, 5, 6, 35, 60, 61, 82, -3] # your data here
data2 = []
for el in data:
if el < 0:
pass
elif el > 60:
data2.append(61)
else:
data2.append(el)
plt.hist(data2, bins=14, density=True, range=(-4.99,65.01))
plt.show()
3条答案
按热度按时间a64a0gku1#
我不知道你所说的“bin大小为5”是什么意思,你可以用specifying the bins with a sequence来绘制直方图:
但是bin大小将匹配相应的区间,这意味着--在本例中--“0-case”将几乎不可见:
(Note当将bin指定为序列时,
60
移动到最后一个bin,将序列更改为[0, 0.5, 59.5, max(data)]
将修复该问题)您(可能)需要首先对数据进行分类,然后绘制类别条形图:
输出:
mi7gmzs62#
根据Tranbi的回答,您可以指定垃圾箱边缘,如他们共享的链接中所详细说明的那样。
histogram
i1icjdpr3#
IIUC您需要一个0(不包括)和60(包括)之间的值的经典直方图,并在侧面添加两个0和〉60的柱。
在这种情况下,我建议分别绘制3个区域:
输出:
编辑:如果你想绘制概率密度图,我可以编辑数据并简单地使用
hist
: