python - 如何使 mplcursors 模块仅显示折线图上绘制的点的标签
问题描述
所以我有一个折线图,其中 python 中的 mplcursors 模块显示其上任何点的坐标。
我希望它只显示明确绘制的点的标签,而不是那些在绘制点之间并且恰好在连接它们的线上的标签。
如果您愿意,我愿意用代码更新问题。
解决方案
一种方法是为相同的点创建一个不可见的散点图,并将其附加mplcursor
到它上面。
import matplotlib.pyplot as plt
import numpy as np
import mplcursors
x = np.arange(30)
y = 30 + np.random.randint(-5, 6, x.size).cumsum()
fig, ax = plt.subplots()
ax.plot(x, y)
dots = ax.scatter(x, y, color='none')
mplcursors.cursor(dots, hover=True)
plt.show()
该功能可以包装到一个辅助函数中:
import matplotlib.pyplot as plt
import numpy as np
import mplcursors
def create_mplcursor_for_points_on_line(lines, ax=None, annotation_func=None, **kwargs):
ax = ax or plt.gca()
scats = [ax.scatter(x=line.get_xdata(), y=line.get_ydata(), color='none') for line in lines]
cursor = mplcursors.cursor(scats, **kwargs)
if annotation_func is not None:
cursor.connect('add', annotation_func)
return cursor
x = np.arange(10, 301, 10)
y = 30 + np.random.randint(-5, 6, x.size).cumsum()
fig, ax = plt.subplots()
lines = ax.plot(x, y)
cursor = create_mplcursor_for_points_on_line(lines, ax=ax, hover=True)
plt.show()
推荐阅读
- azure-ad-b2c - Azure AD B2C:无 SLA
- angular - 在Angular 5中测试primeng手风琴时未触发onOpen函数
- postgresql - 如何在我的计算机上本地设置 Postgres SQL 数据库?
- c# - C#中树莓派的CPU温度
- java - Android成功构建了gradle但没有在模拟器上安装应用程序
- linux - 即使在内存压力下,如何将可执行代码保留在内存中?在 Linux 中
- amazon-web-services - 如何使用 Cloudformation 在 AWS API Gateway 上设置代理
- java - 无法解析扫描仪变量
- azure - 使用 PSKeyVaultCertificate 向 Azure 服务主体添加身份验证时出现请求错误
- python-3.x - 将日期时间转换为时间戳 python