对于外汇图表,jquery Flot Chart - 如何隐藏周末日期时间?

时间:2017-07-17 11:06:15

标签: jquery charts flot forex

如何在X轴上隐藏周末时间?此时间表应跳过星期五23:59到星期一00:00之间的时间 - 即整个周末。

我已经跳过了周五晚上和周一早上之间的所有时间戳,但它仍然显示了周末期间有一些活动的数据。

enter image description here



var data = [
			{ data: EUR, label: "EUR" },
			{ data: USD, label: "USD" },
			{ data: CAD, label: "CAD" },
			{ data: GBP, label: "GBP" },
			{ data: CHF, label: "CHF" },
			{ data: AUD, label: "AUD" },
			{ data: NZD, label: "NZD" },
			{ data: JPY, label: "JPY" }
		];

		$.plot("#chart", data, {
			series: {
				lines:  { show: true },
				points: { show: true }
			},
			xaxis: {
                                mode:       "time",
                                timeformat: "%d/%m %H"
                        },
			yaxis: {
				ticks:       10,
				min:        -45,
				max:         45,
				tickDecimals: 1
			},
                        grid: { 
                               clickable: 1,
                               hoverable: 1,
                               backgroundColor: { colors: [ "#fff", "#eee" ] },
                               borderWidth: {
                                              top:    1,
                                              right:  1,
                                              bottom: 2,
                                              left:   2
                               }
			}
	});




2 个答案:

答案 0 :(得分:1)

That should be possible with the use of the transform properties for the xaxis (see the documentation here). I build a fiddle showing it for a simple case here. But for a time series you have somewhat more to do.

I will leave this here as a starting point and may come back and expand it when I have time. Relevant code:

var x_min = 0;
var x_max = 30;
var x_break_interval = 10;
var x_break_on = 5;
var x_break_size = 4;

// ...

xaxis: {
    tickSize: 5,
    transform: function(value) {
        var shift = 0;
        for (var i = 0; i <= value / x_break_interval; i++) {
            shift++;
        }
        return value - (shift * x_break_size);
    },
    inverseTransform: function(value) {
        var shift = 0;
        for (var i = 0; i <= x_max / x_break_interval; i++) {
            if (value > (i + 1) * (x_break_on + x_break_size)) {
                shift++;
            }
        }
        return value + (shift * x_break_size);
    }
}

答案 1 :(得分:0)

通过使用连续的ordinal#s代替日期时间

来解决此问题

对X使用ordinal - s及其对另一个{array |的间接引用generator}用于显示实际的X轴标签值。

是的,那很简单。

enter image description here

市场开放时间主要既不是连续的,也不是确定性的/可预测的 - 除了交易条款&amp;条件(及其变化),除了正常的银行业务和/或当地假期外,还有行政强制性特设(响应性)市场收盘(希望仅适用于少数选定的交易工具,在某种极端情况下(通常非常极端)市场条件)等。

所以事先没有人知道......

只需要停止使用除X轴的纯序数以外的任何数字,从而产生纯粹的,连续的数字序列(序数),从而枚举&#的所有离散单位34;允许&#34;时间量子(无论是天,小时,分钟(如果在更大的时间范围内交易),秒,毫秒(参见FIX协议API规范),甚至是FX HFT交易界面中的最高速度 - 仍然TimeDOMAIN中有离散值 - 因此可以通过序数枚举。)

一旦您的数据反映了使用本身的序数索引的现实,下一步是再添加一个系列 - 再次,连贯地索引为PriceDOMAIN数据系列的序数指数 - 现在,包含足够的TimeDOMAIN(人类可读)值,将显示在X轴GUI显示可视化中。

自早期以来,这一直是GUI设计的事实上的标准,并且对于概念的简单性(&#34;允许&的序数索引序列)肯定仍然是。 #34;值)和关注点的分离。

matplotlib 以及许多其他图形包使用了几十年,新图形工具也是如此。