重新绘制jqPlot

Redrawing jqPlot

本文关键字:jqPlot 绘制 新绘制      更新时间:2023-09-26

我正在处理一个jqPlot,想知道当有人更改窗口大小时,是否有办法调整/重新绘制它。我知道有一个重绘函数,但我不确定如何真正调用它……有人能给我一些如何做到这一点的建议吗?

这是我的代码:

$.jqplot('chart1', [line1], {
              title:'Users Per Day',
              axes:{
                xaxis:{
                  renderer:$.jqplot.DateAxisRenderer,
                  tickRenderer: $.jqplot.CanvasAxisTickRenderer ,
               //   tickInterval:'1 week',
                  tickOptions:{
                    formatString:'%b %#d, %y',
                    angle:-30
                  } 
                },
                yaxis:{
                  tickOptions:{
                    formatString:'%.1f'
                    }
                }
              },
              highlighter: {
                show: true,
                sizeAdjust: 7.5
              },
              cursor: {
                  show: false
                  /*show: true,
                  zoom: true,
                  showTooltip: false */
              }
          });

"line1"是在该代码之前填充的数组,chart1是绘制图表的div。

有什么想法吗?

谢谢,

Craig

这个关于可调整大小的绘图的页面很有用:http://www.jqplot.com/deploy/dist/examples/resizablePlot.html

这就是我如何为我正在进行的项目解决您的特定问题(我只使用您的代码作为示例):

首先,将您的绘图分配给一个变量:

plot = $.jqplot('chart1', [line1], {
          title:'Users Per Day',
          axes:{
            xaxis:{
              renderer:$.jqplot.DateAxisRenderer,
              tickRenderer: $.jqplot.CanvasAxisTickRenderer ,
           //   tickInterval:'1 week',
              tickOptions:{
                formatString:'%b %#d, %y',
                angle:-30
              } 
            },
            yaxis:{
              tickOptions:{
                formatString:'%.1f'
                }
            }
          },
          highlighter: {
            show: true,
            sizeAdjust: 7.5
          },
          cursor: {
              show: false
              /*show: true,
              zoom: true,
              showTooltip: false */
          }
      });

然后在您的页面上添加此功能:

$(window).resize(function() {
        plot.replot( {resetAxes: true } );
    });

有了resetAxes,它也会重新缩放轴(但您确实会丢失您可能设置的任何最小值/最大值)。有关replot的更多信息,请参阅此页面:http://www.jqplot.com/docs/files/jqplot-core-js.html#jqPlot.replot.

我使用

    var timer;
    $(window).resize(function () {
        clearTimeout(timer);
        timer = setTimeout(function () {
            plot.replot({});
        }, 100);
    });

因此,它不会一直为每个像素重新调整,而是在调整大小的末尾。

通常jqplot图表会占据图表div ID所在的整个区域。因此,试着找到一种方法来重新调整div的大小,并在plot对象上调用redraw来重新绘制图表。