python – 使用matplotlib在鼠标悬停的散点图上标记点,使用除x,y坐标之外的某些标签
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 使用matplotlib在鼠标悬停的散点图上标记点,使用除x,y坐标之外的某些标签,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2878字,纯文字阅读大概需要5分钟。
内容图文
我正在尝试使用DataCursor方法(https://stackoverflow.com/a/4674445/1301710)使用matplotlib标记点.我有几千点,并希望在鼠标悬停时看到他们的标签.但是,有两个不同之处:一,我正在制作散点图和两个,我想为每个点标注名称而不仅仅是x,y坐标.
这是我的代码
import os
import matplotlib.pyplot as plt
class DataCursor(object):
text_template = 'x: %0.2f\ny: %0.2f'
x, y = 0.0, 0.0
xoffset, yoffset = -20, 20
text_template = 'x: %0.2f\ny: %0.2f'
def __init__(self, ax, labels,x,y):
self.ax = ax
self.xlist = x
self.ylist = y
self.labels = labels
self.annotation = ax.annotate(self.text_template,
xy=(self.x, self.y), xytext=(self.xoffset, self.yoffset),
textcoords='offset points', ha='right', va='bottom',
bbox=dict(boxstyle='round,pad=0.5', fc='yellow', alpha=0.5),
arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=0')
)
self.annotation.set_visible(False)
def __call__(self, event):
self.event = event
xdata, ydata = event.artist.get_data()
#self.x, self.y = xdata[event.ind], ydata[event.ind]
self.x, self.y = event.mouseevent.xdata, event.mouseevent.ydata
self.label = self.labels[self.xlist.index(self.x)]
if self.x is not None:
self.annotation.xy = self.x, self.y
self.annotation.set_text(self.label)
self.annotation.set_visible(True)
event.canvas.draw()
def process():
#code to make ht_dict here
# ht_dict has the following format: 'ht1' = [nov14count, nov21count] where each key is a string and each value is a list of two integers
print("Start making scatter plot..")
hts = []
nov14 = []
nov21 = []
for key in ht_dict.keys():
nov14.append(ht_dict[key][0])
nov21.append(ht_dict[key][1])
hts.append(key)
fig = plt.figure()
scatter = plt.scatter(nov14, nov21)
fig.canvas.mpl_connect('pick_event', DataCursor(plt.gca(), hts, nov14, nov21))
scatter.set_picker(5)
plt.show()
process()
我收到以下错误:
AttributeError: 'CircleCollection' object has no attribute 'get_data'
我希望能够在鼠标悬停时看到存储在列表hts中的字符串,分别存储在相同索引处的nov14和nov21列表中的x和y坐标处.我不知道该怎么做这个错误,并希望得到任何帮助.
我的另一个问题是(从尝试对DataCursor线程中的现有绘图进行更改)使用索引来获取标签,因为我当前正在做的将给出一个值,因为单击的值可能在列表错误中不存在与列表中的值不完全相同.您是否有任何建议可以更好地显示某个点的标签/名称?
任何我可以阅读的文档的指导或指示将不胜感激.
谢谢!
解决方法:
在mpldatacursor的文档页面的示例部分中给出了使用标签进行注释的方法,您可以沿着这些线做某事(用每个散点图绘制单个点以便能够为每个点设置单独的标签) :
import matplotlib.pyplot as plt
from mpldatacursor import datacursor
import random
fig, ax = plt.subplots()
ax.set_title('Click on a dot to display its label')
# Plot a number of random dots
for i in range(1, 1000):
ax.scatter([random.random()], [random.random()], label='$ID: {}$'.format(i))
# Use a DataCursor to interactively display the label for a selected line...
datacursor(formatter='{label}'.format)
plt.show()
不幸的是,它的效率相当低,即比1000点更难以使用.
结果示例图片:
内容总结
以上是互联网集市为您收集整理的python – 使用matplotlib在鼠标悬停的散点图上标记点,使用除x,y坐标之外的某些标签全部内容,希望文章能够帮你解决python – 使用matplotlib在鼠标悬停的散点图上标记点,使用除x,y坐标之外的某些标签所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。