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

2024-06-06 21:56:02 发布

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

我试图绘制nd.array的百分位数,我想考虑肘点以上的所有点。所以如果我的肘关节点在83%,我想得到第83百分位点的y坐标(这就是问题所在),所以把它设为一个阈值,得到所有高于这个值的点

我试过了。注释,但是卡住了。请帮忙

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()

Tags: fromlenplotmatplotlibnp绘制plt阈值
1条回答
网友
1楼 · 发布于 2024-06-06 21:56:02

根据目前的情况,我不能完全确定你在找什么。你的x轴不是直观的。当我测试你的代码时,我只得到一个注释错误,因为你应该循环使用百分比而不是总数据。请参阅下面的代码和annotate example以获取更多帮助。如果这不是你想要的,那么请澄清你的问题,我会更新我的答案

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()

这将导致下图

enter image description here

相关问题 更多 >