Использование matplotlib для маркировки точек на графике рассеяния на мыши с помощью некоторой метки, отличной от x, y координат

Я пытаюсь использовать подход 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 при наведении курсора мыши на координаты x и y, хранящиеся в списках nov14 и nov21, соответственно, с одинаковыми индексами. Я не уверен, что делать с этой ошибкой и буду признателен за любую помощь. Другой вопрос, который у меня есть (от проверки изменений существующего графика в потоке DataCursor), что использование индекса для возврата метки, как я сейчас делаю, даст мне значение, не существует в ошибке списка, так как нажатие на значение может не будет точно таким же, как значение в списке. Есть ли у вас какие-либо предложения о лучшем способе отображения какой-либо метки / имени о точке?

Любые указания или указатели на документацию, где я мог бы читать, будут оценены по достоинству.

Благодаря!

One Solution collect form web for “Использование matplotlib для маркировки точек на графике рассеяния на мыши с помощью некоторой метки, отличной от x, y координат”

Приняв подход для аннотации с использованием метки, приведенной в разделе примеров на странице документации 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 баллов.

Пример изображения примера:

аннотированный разброс

  • Стрелки стрелочки Matplotlib указывают неправильный путь
  • проверка python, если фигура 2d или 3d
  • Python - Легенда перекрывается круговой диаграммой
  • matplotlib: сделать знак плюса
  • Matplotlib 2 Подзаголовки, 1 Colorbar
  • Как установить размер шрифта оси Matplotlib Legend?
  • Как сделать цвет фитильной частью свечной палочки с помощью matplotlib?
  • Контурный график в python
  •  
    Interesting Posts for Van-Lav

    Вам нужно как можно быстрее перебирать список Python в обратном порядке

    Использование объекта numpy 'module' не имеет атрибута 'array'

    PyCharm: Недостижимый код?

    классы старого стиля и нового стиля в Python 2.7?

    Python regex конвертирует URL-адрес youtube в YouTube

    Что такое способ Python для работы с деревом каталогов?

    Как изменить цвет переднего плана или фона кнопки Tkinter на Mac OS X?

    SSIM / MS-SSIM для TensorFlow

    Python: пропустить строки комментариев, отмеченные # в csv.DictReader

    Извлечение данных из Neo4j с использованием PySpark

    Динамически исключать или включать поле в сериализатор рамки Django REST

    Как я могу добавить представление, не возвращающее модель / запрос, с помощью django-restframework при использовании DjangoObjectPermissions?

    Вызов запроса на выход дает странный результат в рекурсивном методе с помощью scrapy

    Мой Django устанавливает в виртуальном env отсутствие папки шаблонов администраторов

    Python – Twisted, Proxy и изменение содержимого

    Python - лучший язык программирования в мире.