代码之家  ›  专栏  ›  技术社区  ›  Vishal

在图表图像中显示鼠标悬停事件的轴值

  •  1
  • Vishal  · 技术社区  · 16 年前

    我将一个图表图像(带有X轴和Y轴)返回到浏览器创建的matplotit。 现在我想显示鼠标悬停事件时的轴值。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Mark    16 年前

    当我最近做了类似的事情时,我把一个png从matplotlib返回到浏览器。然后,我使用对应于绘制点的像素值将图像映射应用于PNG。我使用OnMouseOver事件弹出一个“工具提示”(实际上只是一个绝对位置的DIV),其中包含关于点的元数据。

    这个 article 为我的努力提供了基础,但我记得在他的实现中有一些打嗝(主要是由于MaMattLIB API的变化)。如果这个问题在周一仍然存在,我将用实现中的特定代码更新这个答案(目前我没有访问工作机器的权限)。

    编辑:按承诺的示例代码

    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用新的IMG和图像映射更新一个DIV。

        2
  •  2
  •   Ryan Joy    16 年前

    下面是一个使用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 学习更多。