繁体   English   中英

如何注释(xy 坐标)nd.array 的百分位图?

[英]How to annotate(xy coordinates) a percentile plot of nd.array?

我试图绘制 nd.array 的百分位数,我想考虑肘点上方的所有点。 因此,如果我的肘部点在 83%,我想在第 83 个百分位点处获得 y 坐标(因此是问题),因此将其设置为阈值并获得高于该点的所有点。

我试过 .annotate,但被卡住了。 请帮忙。

from matplotlib import mlab
p = np.array([0,10,20,30,40,50,60,70,80,83,84,85,90])
pchange=np.array([1,2,3,6,5,8,9,7,4,5,6,9,8,5,2,3,6,4,25,36,14,65,98,98,54,25,26,23,24,27,28,26,24,262,1,156,31,51,351,651,35,153,135,1,5,31,68,3,5,61,354,685,16,813,51,685,681,35,68,135,1685,1354,135,415,135,153,413,513,56,513,213,651,354,51,35,135,135,135,438,535,468,53,8,35,4,648,468,535,468,46,8,498,498,749,8798,798,79,8798,7,979,879,8,97,9,79,7,9798,798,78,979,87,974,65,498,46,8,98,79,878,978,65,984,98,49,9,569,949,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888]) 
perc = mlab.prctile(pchange, p)
print(perc)
plt.plot(perc)
plt.plot((len(perc)-1) * p/100., perc, 'ro')
plt.xticks((len(perc)-1) * p/100., map(str, p))
for a,b in enumerate(pchange):
    plt.annotate(b,(perc[a],p[a]),xytext=(perc[a],p[a]))
plt.show()

根据目前的信息,我不完全确定你在追求什么。 您的 x 轴不直观。 当我测试您的代码时,我只会收到您的注释错误,因为您应该遍历百分比而不是总数据。 请参阅下面的代码和注释示例以获取更多帮助。 如果这不是您要找的,那么请澄清您的问题,我会更新我的答案。

import numpy as np
from matplotlib import pyplot as plt

p = np.array([0,10,20,30,40,50,60,70,80,83,84,85,90])

pchange=np.array([1,2,3,6,5,8,9,7,4,5,6,9,8,5,2,3,6,4,25,36,14,65,98,98,54,25,26,23,24,27,28,26,24,262,1,\
              156,31,51,351,651,35,153,135,1,5,31,68,3,5,61,354,685,16,813,51,685,681,35,68,135,1685,1354,\
              135,415,135,153,413,513,56,513,213,651,354,51,35,135,135,135,438,535,468,53,8,35,4,648,468,535,\
              468,46,8,498,498,749,8798,798,79,8798,7,979,879,8,97,9,79,7,9798,798,78,979,87,974,65,498,46,8,\
              98,79,878,978,65,984,98,49,9,569,949,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,\
              888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,888,])

perc = np.percentile(pchange,p)


plt.plot(p, perc)
plt.plot(p, perc, 'ro')

for a,b in enumerate(perc):
    plt.annotate('%2.2f'%b,(p[a],perc[a]),xytext=(p[a],perc[a])) 
    #Note you may want to add an offset to your x,y since labeling every point
    # makes the plot cluttered. I added %2.2f to truncate the values some.

plt.show()

这导致下图

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM