【问题标题】:Programmatically set the marker on a plot以编程方式在绘图上设置标记
【发布时间】:2012-05-02 14:21:24
【问题描述】:

我想知道是否可以以编程方式突出显示绘图上的标记。

我有一个折线图和一个单独的数据网格。

单击折线图中的标记将突出显示数据网格中的相关行,单击数据网格中的行将突出显示折线图中的相关标记。

在下面的示例中,我可以满足第一个要求。 $('#chartdiv').bind('jqplotDataClick', function (ev, seriesIndex, pointIndex, data) 返回我可以用来查找相关数据网格行的数据点。

但我被困在了相反的地方。

在我的示例中,为简单起见,我将数据网格替换为按钮。

SetSelectedMarker之类的我不知道的方法吗?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
   <title>jqPlot examples</title>   
  <!--[if lt IE 9]><script language="javascript" type="text/javascript" src="js/jquery.jqplot.1.0.0r1095/dist/excanvas.min.js"></script><![endif]-->
  <!-- jQuery runtime minified -->
  <script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.7.1.min.js" type="text/javascript"></script>

      <style type="text/css">        
   ul.tooltip
   {
    list-style-type:none;
    padding:0px;
    margin:0px;
   }        
      </style>

    <script class="include"  type="text/javascript" src="js/jquery.jqplot.1.0.0r1095/dist/jquery.jqplot.min.js"></script>
    <script class="include" type="text/javascript" src="js/jquery.jqplot.1.0.0r1095/dist/plugins/jqplot.canvasTextRenderer.min.js"></script>
    <script class="include" type="text/javascript" src="js/jquery.jqplot.1.0.0r1095/dist/plugins/jqplot.canvasAxisLabelRenderer.min.js"></script>
    <script class="include" type="text/javascript" src="js/jquery.jqplot.1.0.0r1095/dist/plugins/jqplot.highlighter.js"></script>

      <script type="text/javascript">
        // We use a document ready jquery function.
          $(document).ready(function () {

              // Some simple loops to build up data arrays.
              var cosPoints = [];
              for (var i = 0; i < 2 * Math.PI; i += 0.4) {
                  cosPoints.push([i, Math.cos(i)]);
              }

              var plot3 = $.jqplot('chartdiv', [cosPoints],
                {
                    highlighter: {
                        show: true
                        , showTooltip: true
                        , tooltipLocation: 'ne'
                        , tooltipAxes: 'xy'
                        , useAxesFormatters: null
                        , formatString: '<div><ul class="tooltip"><li>%.4f</li><li>%.6f</li></ul></div>'
                    },
                    title: 'Line Style Options',
                    // Series options are specified as an array of objects, one object
                    series: [
                      {
                          // Change our line width and use a diamond shaped marker.
                          lineWidth: 2,
                          color: 'red',
                          markerOptions: { style: 'dimaond', color: 'black' }
                      },
                      {
                          // Don't show a line, just show markers.
                          // Make the markers 7 pixels with an 'x' style
                          showLine: false,
                          markerOptions: { size: 7, style: "x" }
                      },
                      {
                          // Use (open) circlular markers.
                          markerOptions: { style: "circle" }
                      },
                      {
                          // Use a thicker, 5 pixel line and 10 pixel
                          // filled square markers.
                          lineWidth: 5,
                          markerOptions: { style: "filledSquare", size: 10 }
                      }
                  ]
                  , cursor: { show: true, showTooltip: true }
                }
              );


              $('#chartdiv').bind('jqplotDataClick', function (ev, seriesIndex, pointIndex, data) {
                  alert(data);
              });

              $('#button').bind("click", function () {
                  DoSomeThing(plot3);
              });
          });

          function DoSomeThing(plot) {
             // *** highlight point in plot ***
          }

    </script>
</head>
<body>

<!--plot container-->
<div id="chartdiv" style="height:400px;width:600px; "></div>
<input id="button" type="button" value="click"/>

</body>
</html>

【问题讨论】:

  • 你想要什么样的亮点?您只想弹出荧光笔 div 吗?
  • @Mark 是的,基本上是这个演示:(jqplot.com/tests/cursor-highlighter.php) 单击表格中的行,图形上的点会在其周围出现光环和/或显示数据标签。我想这就是你的意思?

标签: jquery jqplot


【解决方案1】:

我想出了一些答案。如果@Mark 知道如何弹出荧光笔,我认为他可能知道更好的选择。由于我知道如何获得您所追求的适当位置,只是我不确定如何调用荧光笔然后在此坐标处进行绘制。

Here goes my answer.

我只是以像素为单位获取网格的坐标。然后抓住高光画布在那里画一个圆圈,事先总是打电话replot()有一个新鲜的情节。 尝试使用该按钮几次,以查看它如何遍历数据的每个点。 如果你知道如何改进它,例如,如何避免每次都重新绘制,那么请告诉我。

【讨论】:

  • 喜欢您的解决方案。我能想到的唯一改进是使用单独的画布来绘制“突出显示”标记。这就是荧光笔插件的作用,它可以清除自己的画布,而您不必重新绘制整个绘图。事实上,如果您启用了突出显示,您可以使用它的画布:jsfiddle.net/DEGCv
  • @Mark 非常感谢您的评论。我已经相应地更新了我的代码。
  • 谢谢两位。看起来不错
【解决方案2】:

你可以只实现高亮插件中使用的绘图功能 如此处所示。 另一种选择可能是更改插件本身并创建一个新事件或公开绘图功能等。

当您将鼠标移到折线图中的另一个标记上时,突出显示的标记会立即发生变化,但这是意料之中的。

在标记设置为突出显示时显示工具提示会很好。

function DoSomeThing(plot) {

    var hl = plot.plugins.highlighter;
    var s = plot.series[0];
    var smr = s.markerRenderer;
    var mr = hl.markerRenderer;
    mr.style = smr.style;
    mr.lineWidth = smr.lineWidth + hl.lineWidthAdjust;
    mr.size = smr.size + hl.sizeAdjust;
    var rgba = $.jqplot.getColorComponents(smr.color);
    var newrgb = [rgba[0], rgba[1], rgba[2]];
    var alpha = (rgba[3] >= 0.6) ? rgba[3]*0.6 : rgba[3]*(2-rgba[3]);
    mr.color = 'rgba('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+','+alpha+')';
    mr.init();
    mr.draw(s.gridData[3][0], s.gridData[3][1], hl.highlightCanvas._ctx);
}

【讨论】:

    【解决方案3】:

    如果您想更改颜色,请尝试使用新系列颜色修改您的选项字符串,因为该函数仅返回单击点。但是你必须自己手动更改颜色。

    【讨论】:

    • 你能扩展你的答案吗?我认为您正在查看错误的函数,我想突出显示图表上的一个点(DoSomething(plot) 方法)而不是更新表格 - 该部分工作正常。
    • 但恐怕我认为不可能只用这个库改变一点的颜色,但你可以做这样的事情去下面的链接和第二个例子。就像在这里一样,您可以添加第三个参数并用标记突出显示它。否则我不认为你可以改变一个点的颜色并对不想突出显示的点使用空值 [[-12, 7, null], [-3, 14, null], [2 , -1, '(low)'], [7, -1, '(low)'], [11, 11, null], [13, -1, '(low)']];。因此,在单击发生后添加此突出显示标签后,您必须重新绘制绘图
    猜你喜欢
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多