Я хочу создать всплывающие подсказки (показывающие значения данных) для линейных диаграмм SVG, созданных с помощью matplotlib. Это позволит пользователю щелкнуть или навести указатель мыши на каждый маркер на линейной диаграмме, отображающей значение этой конкретной точки.
Чтобы сделать это, мне нужно получить доступ к маркерным элементам объекта Line2D и добавить gid к каждому такому элементу.
На http://matplotlib.org/examples/user_interfaces/svg_histogram.html есть пример того, как это делается для гистограммы.
H = plt.hist([r,r1], label=labels)
containers = H[-1]
hist_patches = {}
for ic, c in enumerate(containers):
hist_patches['hist_%d'%ic] = []
for il, element in enumerate(c):
element.set_gid('hist_%d_patch_%d'%(ic, il))
hist_patches['hist_%d'%ic].append('hist_%d_patch_%d'%(ic,il))
Однако, если я попытаюсь сделать это с помощью линейной диаграммы, я обнаружу, что объект Line2D не является итерируемым — вероятно, потому, что он не является набором патчей, таких как столбцы гистограммы.
H = plt.plot([1,2,3,4],[1,4,9,16], 'ro')
containers = H[-1]
enumerate(containers)
Это приводит к: «TypeError: объект Line2D не является итерируемым»
Вопрос в том, как получить доступ к отдельным маркерам из Line2D.
Есть несколько способов сделать это с помощью интерактивных бэкендов matplotlib. Но мне нужно реализовать это для неинтерактивного SVG.
x
иy
, которые вы передалиplot
(илиzip(x,y)
). Это те точки, к которым вы все равно хотите добавить gids, да? - person cphlewis   schedule 06.05.2015