jqplot - Canvas叠加层无法在Candle Stick Chart中使用

时间:2012-08-10 03:59:40

标签: jquery canvas overlay jqplot candlestick-chart

我正在尝试使用画布覆盖在烛台图表上绘制一条水平线,我得到一个错误:对象不支持属性或方法'series_u2p'错误?

任何想法可能是什么原因?

<!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></title>
<script type="text/javascript" src="http://www.jqplot.com/src/jquery.min.js"></script>
<script type="text/javascript" src="http://www.jqplot.com/src/jquery.jqplot.min.js"></script>
<script type="text/javascript" src="http://www.jqplot.com/deploy/dist/examples/syntaxhighlighter/scripts/shCore.min.js"></script>
<script type="text/javascript" src="http://www.jqplot.com/deploy/dist/examples/syntaxhighlighter/scripts/shBrushJScript.min.js"></script>
<script type="text/javascript" src="http://www.jqplot.com/deploy/dist/examples/syntaxhighlighter/scripts/shBrushXml.min.js"></script>
<script type="text/javascript" src="http://www.jqplot.com/src/plugins/jqplot.dateAxisRenderer.js"></script>
<script type="text/javascript" src="http://www.jqplot.com/src/plugins/jqplot.ohlcRenderer.js"></script>
<script type="text/javascript" src="http://www.jqplot.com/src/plugins/jqplot.highlighter.js"></script>
<script type="text/javascript" src="http://www.jqplot.com/src/plugins/jqplot.canvasOverlay.js"></script>
<script type="text/javascript" src="http://www.jqplot.com/src/plugins/jqplot.cursor.js"></script>
<script type="text/javascript" src="http://www.jqplot.com/deploy/dist/plugins/jqplot.categoryAxisRenderer.min.js"></script>
<script type="text/javascript" src="http://www.jqplot.com/deploy/dist/plugins/jqplot.canvasTextRenderer.min.js"></script>
<script type="text/javascript" src="http://www.jqplot.com/deploy/dist/plugins/jqplot.canvasAxisTickRenderer.min.js"></script>
<script type="text/javascript" src="http://www.jqplot.com/deploy/dist/plugins/jqplot.canvasOverlay.min.js"></script>
</head>


<body>
<div id="chart" style="height: 250px; width: 600px;"></div>


    <script type="text/javascript">
    var plot;
    $(document).ready(function () {
     $.jqplot.config.enablePlugins = true;
     plot = $.jqplot('chart', [ohlc], {
         seriesDefaults: {
             yaxis: 'y2axis'
         },
         axes: {
             xaxis: {
                 renderer: $.jqplot.DateAxisRenderer,
                 tickOptions: {
                     formatString: '%b %e'
                 },
                 min: "09-01-2008",
                 max: "06-22-2009",
                 tickInterval: "6 weeks",
             },
             y2axis: {
                 tickOptions: {
                     formatString: '$%d'
                 }
             }
         },
         series: [{
             renderer: $.jqplot.OHLCRenderer,
             rendererOptions: {
                 candleStick: true
             }
         }],
         cursor: {
             zoom: true,
             show: true
         },
         canvasOverlay: {
             show: true,
             objects: [{
                 horizontalLine: {
                     name: 'lineOne',
                     show: true,
                     y: 1,
                     lineWidth: 6,
                     color: 'rgb(100, 55, 124)',
                     shadow: false
                 }
             }]
         },
         highlighter: {
             show: true,
             showMarker: false,
             tooltipAxes: 'xy',
             yvalues: 4,
             formatString: '<table class="jqplot-highlighter"> \
    <tr><td>date:</td><td>%s</td></tr> \
    <tr><td>open:</td><td>%s</td></tr> \
    <tr><td>hi:</td><td>%s</td></tr> \
    <tr><td>low:</td><td>%s</td></tr> \
    <tr><td>close:</td><td>%s</td></tr></table>'
         }
     });

 });
    </script>
<script class="code" language="javascript" type="text/javascript">
ohlc = [
['06/15/2009 16:00:00', 136.01, 139.5, 134.53, 139.48],
['06/08/2009 16:00:00', 143.82, 144.56, 136.04, 136.97],
['06/01/2009 16:00:00', 136.47, 146.4, 136, 144.67],
['05/26/2009 16:00:00', 124.76, 135.9, 124.55, 135.81],
['05/18/2009 16:00:00', 123.73, 129.31, 121.57, 122.5],
['05/11/2009 16:00:00', 127.37, 130.96, 119.38, 122.42],
['05/04/2009 16:00:00', 128.24, 133.5, 126.26, 129.19],
['04/27/2009 16:00:00', 122.9, 127.95, 122.66, 127.24],
['04/20/2009 16:00:00', 121.73, 127.2, 118.6, 123.9],
['04/13/2009 16:00:00', 120.01, 124.25, 115.76, 123.42],
['04/06/2009 16:00:00', 114.94, 120, 113.28, 119.57],
['03/30/2009 16:00:00', 104.51, 116.13, 102.61, 115.99],
['03/23/2009 16:00:00', 102.71, 109.98, 101.75, 106.85],
['03/16/2009 16:00:00', 96.53, 103.48, 94.18, 101.59],
['03/09/2009 16:00:00', 84.18, 97.2, 82.57, 95.93],
['03/02/2009 16:00:00', 88.12, 92.77, 82.33, 85.3],
['02/23/2009 16:00:00', 91.65, 92.92, 86.51, 89.31],
['02/17/2009 16:00:00', 96.87, 97.04, 89, 91.2],
['02/09/2009 16:00:00', 100, 103, 95.77, 99.16],
['02/02/2009 16:00:00', 89.1, 100, 88.9, 99.72],
['01/26/2009 16:00:00', 88.86, 95, 88.3, 90.13],
['01/20/2009 16:00:00', 81.93, 90, 78.2, 88.36],
['01/12/2009 16:00:00', 90.46, 90.99, 80.05, 82.33],
['01/05/2009 16:00:00', 93.17, 97.17, 90.04, 90.58],
['12/29/2008 16:00:00', 86.52, 91.04, 84.72, 90.75],
['12/22/2008 16:00:00', 90.02, 90.03, 84.55, 85.81],
['12/15/2008 16:00:00', 95.99, 96.48, 88.02, 90],
['12/08/2008 16:00:00', 97.28, 103.6, 92.53, 98.27],
['12/01/2008 16:00:00', 91.3, 96.23, 86.5, 94],
['11/24/2008 16:00:00', 85.21, 95.25, 84.84, 92.67],
['11/17/2008 16:00:00', 88.48, 91.58, 79.14, 82.58],
['11/10/2008 16:00:00', 100.17, 100.4, 86.02, 90.24],
['11/03/2008 16:00:00', 105.93, 111.79, 95.72, 98.24],
['10/27/2008 16:00:00', 95.07, 112.19, 91.86, 107.59],
['10/20/2008 16:00:00', 99.78, 101.25, 90.11, 96.38],
['10/13/2008 16:00:00', 104.55, 116.4, 85.89, 97.4],
['10/06/2008 16:00:00', 91.96, 101.5, 85, 96.8],
['09/29/2008 16:00:00', 119.62, 119.68, 94.65, 97.07],
['09/22/2008 16:00:00', 139.94, 140.25, 123, 128.24],
['09/15/2008 16:00:00', 142.03, 147.69, 120.68, 140.91]
];
</script>




 <script type="text/javascript">
    function lineup() {
     var co = plot.plugins.canvasOverlay;
     var line = co.get('lineOne');
     line.options.y += 1;
     co.draw(plot);
 }
    </script>
    </body>
    </html>

2 个答案:

答案 0 :(得分:2)

块图表遇到了同样的问题,但看起来它并不依赖于图表类型。

如果轴已设置为

seriesDefaults: {
  yaxis: 'y2axis'
}

要使叠加层起作用,您还需要为叠加层对象指定它,例如:

canvasOverlay: {
  show: true,
  objects: [
    {verticalLine: {
      yaxis: 'y2axis', // <--- specify axis
      x: 0,
      lineWidth: 1,
      color: 'rgb(255, 0, 0)',
      shadow: false
    }}
  ]
}

答案 1 :(得分:0)

我对条形图有同样的问题。

问题似乎来自以下选项

seriesDefaults: {
   yaxis: 'y2axis'
}

尝试发表评论,看看会发生什么。

无论如何,我不知道如何真正解决问题。 jqplot库中可能存在故障。

希望这有帮助!