python - 在 matplotlib 中绘制特定元素值
问题描述
我有一个如下列表:
freq = [29342, 28360, 26029, 21418, 20771, 18372, 18239, 18070, 17261, 17102]
我想显示 x 轴的第 n 个和第 m 个元素的值并画一条垂直线
plt.plot(freq[0:1000])
例如在上图中,x 轴上的第 100 个元素 - 我怎样才能显示线上的值?
我试图膝盖,但它只显示一个肘部。我建议它是第 50 个元素?但究竟是什么x,y
?
from kneed import KneeLocator
kn = KneeLocator(list(range(0, 1000)), freq[0:1000], curve='convex', direction='decreasing')
import matplotlib.pyplot as plt
kn.plot_knee()
#plt.axvline(x=50, color='black', linewidth=2, alpha=.7)
plt.annotate(freq[50], xy=(50, freq[50]), size=10)
解决方案
你可能认为每个人都知道这个库kneed
。好吧,我不知道其他人,但我以前从未见过那个(它甚至在 SO 上都没有标签)。
但是他们的文档非常好(qhull
请注意!)。所以,你可以这样做:
#fake data generation
import numpy as np
x=np.linspace(1, 10, 100)
freq=x**(-1.9)
#here happens the actual plotting
from kneed import KneeLocator
import matplotlib.pyplot as plt
kn = KneeLocator(x, freq, curve='convex', direction='decreasing')
xk = kn.knee
yk = kn.knee_y
kn.plot_knee()
plt.annotate(f'Found knee at x={xk:.2f}, y={yk:.2f}', xy=(xk*1.1, yk*1.1) )
plt.show()
样本输出:
推荐阅读
- c - 连接客户端/服务器以进行 UDP 广播的正确方法
- r - R删除所有以字符串开头的列都有NA的行
- python - 通过 Python 中的节俭服务器 JDBC 在 AWS EMR Spark 集群上执行 SQL?
- python - 文件操作和优化python代码
- php - 搜索具有既定标准 php 的文件
- javascript - 在 PHP while 循环中唯一标识 Javascript 模态
- c++ - 使用 cout 时,我可以设置一个变量来改变浮点域吗?
- c - 只返回空格和字母的函数
- php - 在 wordpress 插件类中将钩子从构造函数更改为 init - 不再工作
- npm - npm -S 标志是什么意思?