Python 如何在matplotlib中标记总金额的一部分?

Python 如何在matplotlib中标记总金额的一部分?,python,matplotlib,nlp,distribution,Python,Matplotlib,Nlp,Distribution,我试图用pythons matplotlib创建一个简单的直方图 这是关于注释长度的分布。我有几千条评论,我已经有了以下代码: x = [60, 55, 2, 30, ..., 190] plt.hist(x, bins=100) plt.xlim(0,150) plt.grid(axis="x") plt.title("Distribution of Comment Lengths") plt.xlabel("Tokens/Comment") plt.ylabel("Amount of Co

我试图用pythons matplotlib创建一个简单的直方图

这是关于注释长度的分布。我有几千条评论,我已经有了以下代码:

x = [60, 55, 2, 30, ..., 190]

plt.hist(x, bins=100)
plt.xlim(0,150)
plt.grid(axis="x")
plt.title("Distribution of Comment Lengths")
plt.xlabel("Tokens/Comment")
plt.ylabel("Amount of Comments")
plt.show()
我想实现的是一种方式,显示我通过了所有令牌的50%(或33%和66%,或25%,50%和75%)。我在想象一条垂直线,将分布分成两半,两边都有等量的代币

matplotlib是否提供了轻松实现这一目标的机会


谢谢你的帮助

要获得所有注释的
p%
对应的x值,只需对值列表进行排序,然后将其索引到总长度的
p%
。您可以在这些位置添加垂直线,并添加第二个x轴来标记它们


要获取与所有令牌的
p%
相对应的x值,请查找值为所有x的总和
p%的元素在数组中的位置以及排序列表的累积和。使用该位置为已排序的值列表编制索引

下面是一些代码来说明它是如何工作的

从matplotlib导入pyplot作为plt
将numpy作为np导入
#创建一些随机数据进行测试,将其转换为与问题类似的常规Python列表
x=列表(np.abs(np.random.normal(85,302000)))
通缉百分比=[5,10,25,33,50,66,75,90,95]
sx=np.数组(x)
sx.sort()
cx=sx.cumsum()
百分位_sx=[sx[int(len(x)*p/100)]表示通缉中的p
百分位_cx=[sx[cx.searchsorted(cx[-1]*p/100)]表示通缉_百分位中的p]
图,轴=plt.子批次(ncols=2,figsize=(12,4))
对于ax、percentile、color、zip中的标题(轴、[percentile_sx、percentile_cx],
['crimson','limegreen',['Comments Percentile','Tokens Percentile]]:
ax.hist(x,箱子=20)
对于以百分比表示的xp:
ax.axvline(xp,颜色=颜色)
ax2=ax.twiny()
ax.set_xlim(0,150)
ax2.set_xlim(ax.get_xlim())#两个轴需要完全相同的限制
ax2.set_xticks(百分位)#使用百分位对应的X作为记号位置
ax2.设置标记(想要的百分比,颜色=颜色)#使用百分比来标记标记
ax.set_title(“注释长度的分布,”+title)
ax.set_xlabel(“通过标记数装箱的注释”)
ax.set_ylabel(“评论数量”)
plt.show()
左边是有100个箱子的地块,右边是有20个箱子的地块:


非常感谢!但我认为,如果每个注释都被视为一个单一的数据点,那么您的代码会标记注释数量的百分位数。我实际上是在寻找如果我只是从这个百分位中获取评论,将涵盖的代币数量。但在你向我展示了如何用这种方式标记百分位数之后,我想我可以想出剩下的。