3

告诉我是否有人遇到过这个问题:

我使用 jqPlot 在我的页面图上显示

<script language="javascript" type="text/javascript">

    $(document).ready(function () {
            $.jqplot.config.enablePlugins = true;
            var chLines = [[['09/30/2010 00:00:00',24.13],['12/31/2010 00:00:00',28.26],['03/31/2011 00:00:00',24.00],['06/30/2011 00:00:00',25.35],['09/30/2011 00:00:00',26.26],['12/31/2011 00:00:00',29.71]]];
            var chSeries = [{       color: '#436277',       label: 'label'  }];
        var mnth;
        var quarter;

        $.jqplot.DateTickFormatter = function(format, val) {
            if (!format) {
                format = '%Y/%m/%d';
            }       

            if(format == '%Q') {
                mnth = $.jsDate.strftime(val, '%#m');
                quarter = parseInt((mnth-1) / 3) + 1;
                return $.jsDate.strftime(val, '%Y') + 'Q' + quarter;
            }
            return $.jsDate.strftime(val, format);
        };

        //$.jqplot.DateAxisRenderer.tickInterval = 86400000*32*3;

        var plot = $.jqplot('content-chart', chLines,
            {
                //animate: !$.jqplot.use_excanvas, // Only animate if we're not using excanvas (not in IE 7 or IE 8)..           
                axes: {
                    xaxis: {
                        tickInterval: 86400000*32*3,
                        renderer: $.jqplot.DateAxisRenderer,
                        borderColor: 'black',
                        borderWidth: 0.5,
                        tickOptions: {
                            showGridline: false,
                            //formatString: '%b %Y',
                            formatString: '%Q',
                            textColor: 'black',
                            fontSize: '11px',
                        }
                    },
                    yaxis: {
                        min: 0,
                        tickOptions: {
                            formatString: '%.2f',
                            textColor: 'black',
                            fontSize: '11px'
                        }
                    }
                },
                highlighter: {
                    show: true,
                    sizeAdjust: 7.5
                },
                seriesDefaults: {
                    lineWidth: 3
                },

                series: chSeries,
                legend: {
                    show: true,
                    location: 'sw',//compass direction, nw, n, ne, e, se, s, sw, w.
                    xoffset: 5,
                    yoffset: 5
                    //placement: 'outside'
                },

                grid:{
                    background: 'white',
                    borderColor: 'white',
                    shadow: false,
                    gridLineColor: '#999999'
                }
            });
            $(window).bind('resize', function(event, ui) {              
                plot.replot( { resetAxes: true } );
            });
    });
</script>

我看到刻度标签在 X 轴上重复在此处输入图像描述

但是当窗口调整大小时, createTicks函数中 jqplot.dateAxisRenderer.js 中的this.tickInterval对象变为空。我还尝试更改函数createTicks中的代码,如下所示

this.tickInterval = 86400000 * 32 * 3;
var tickInterval = this.tickInterval;

但不幸的是,当调整窗口大小时,刻度标签开始相互碰撞。

4

2 回答 2

2

要解决您的问题,您必须首先为日期轴(即 X 轴)设置“最小”和“最大”日期。显然,只有在设置了“min”和“max”值时,渲染器才会使用“tickInterval”的值。这种问题实际上已经在堆栈上解决了——请看这个答案

因此,使用此建议,您需要设置以下参数,如下所示:

tickInterval: "3 months",   
min: chLines[0][0][0],
max: chLines[0][0][chLines[0].length-1]

对于调整大小位,您需要使用以下内容:

$(window).bind('resize', function(event, ui) {    
    if (plot) {
        plot.replot();
    }
});

这是为您的代码制作的工作代码示例。


编辑: 在摆弄样本一段时间后,我观察到仍然存在一些被认为不可见的问题,因为格式覆盖了它。看起来min,max和的设置tickInterval还不够,因为值仍然不是每 3 个月一次,因为每个刻度显示第 30 天,有时应该是 31。

然后我想出的唯一解决方案是自己设置刻度。在这种情况下,您不需要minmax并且不再需要tickInterval

于 2012-04-19T17:02:38.787 回答
0

对我来说,更新 jqplot 解决了刻度标签相互碰撞的问题,为了解决刻度间隔不起作用的问题,请参见此处接受的答案:

jqPlot DateAxis tickInterval 不起作用

于 2013-05-01T11:33:02.613 回答