Отображение значений оси для события наведения мыши в изображении диаграммы - PullRequest
1 голос
/ 16 января 2010

Я возвращаю изображение диаграммы (с осями x и y) браузеру, создавшему мой матплотлит. Теперь я хочу показать значения осей, когда происходит событие наведения мыши.

Ответы [ 2 ]

2 голосов
/ 17 января 2010

Когда я недавно сделал что-то подобное, я вернул PNG из matplotlib в браузер. Затем я применил карту изображений к PNG, используя значения пикселей, которые соответствуют нанесенным точкам. Я использовал событие onmouseover, чтобы вызвать всплывающую подсказку (на самом деле просто div с абсолютным позиционированием), который содержал метаданные о точке.

Эта статья послужила основой для моих усилий, но я помню, что в его реализации были определенные сбои (в основном из-за изменений в API Matplotlib). Если этот вопрос все еще не решен в понедельник, я обновлю этот ответ конкретным кодом из моей реализации (в данный момент у меня нет доступа к моим рабочим машинам).

РЕДАКТИРОВАТЬ: Как и обещал Образец кода

import matplotlib.pyplot as plt

dpi = 96
fig = plt.figure(figsize=(8,8),dpi=dpi)
imgWidth = fig.get_figwidth() * dpi ## this is the actual pixel size of the plot
imgHeight = fig.get_figheight() * dpi ## this is the actual pixel size

my_lines = []
my_lines.append(plt.plot(Xs,Ys,marker='o')[0]) # add a line object to plot

mapHTML = '<MAP name="curveMap">'
for lineObj in my_lines:
  ## convert the points to pixel locations, for pop-ups
  lineObj._transform_path()
  path, affine = lineObj._transformed_path.get_transformed_points_and_affine()
  path = affine.transform_path(path)
  for real,pixel in zip(lineObj.get_xydata(),path.vertices):
    mapHTML+='''<AREA shape=\"circle\" coords=\"%i,%i,5\" href=\"javascript: void(0);\" onmouseout=\"outFly();\" onmouseover=\"javascript: popFly\(event,\\'%s\\',%i,%i\)\" />''' % (pixel[0],imgHeight-pixel[1],lineName,real[0],real[1])
mapHTML += '</MAP>'
fig.savefig(file(plot_file,"w"),format='png',dpi=dpi)
plt.close(fig)
plotHTML = '''<img src="/getPlot?uniq=%f" width="%i" height="%i" ismap usemap="#curveMap" onload="imageLoadCallback();" id="curPlot" />''' % (time.time(),imgWidth,imgHeight)
return "({'plotHTML':'%s','mapHTML':'%s'})" % (plotHTML,mapHTML)

Вы увидите, что я записываю изображение в png-файл, а затем возвращаю JSON. Я использую javascript для обновления DIV с помощью новых img и карты изображений.

2 голосов
/ 16 января 2010

Вот решение с использованием jQuery:

$('#myChart').mousemove(function(e){
    var x = e.pageX - this.offsetLeft;
    var y = e.pageY - this.offsetTop;
    // Do something with x and y;
});

См. http://docs.jquery.com/Tutorials:Mouse_Position, чтобы узнать больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...