动态数据显示分散的日期轴



我正在尝试为股票价格图表绘制烛台标记。我在交易日的每一分钟都有一个标记 - 上午9:30至下午4:00。在每个交易日,我不想在4:01 pm到9:29 AM展示空白空间。有什么方法可以从图表上的X轴上删除该时间跨度?我希望所有数据看起来连续,而不会破裂。我正在使用我创建的ticktodatetimelabelprovider为X轴使用数字。有没有办法更改标签供应商以满足我的需求?还是比这更深入?

这是我的LabelProvider的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
namespace Microsoft.Research.DynamicDataDisplay.Charts {
public class TickToDateTimeLabelProvider : NumericLabelProviderBase {
    public override UIElement[] CreateLabels(ITicksInfo<double> ticksInfo) {
        var res = new TextBlock[ticksInfo.Ticks.Length];
        for (int i = 0; i < ticksInfo.Ticks.Length; ++i) {
            long l = (long)ticksInfo.Ticks[i];
            if (l < 0)
                l = 0;
            DateTime dt = new DateTime(l);
            res[i] = new TextBlock();
            res[i].Text = dt.ToString();
        }
        return res;
    }
}
}

解决了这个问题,我最终将x映射到集合中的数据的位置,然后制作一个新的标签提供商,将位置更改为我想要的数据时。我的新标签提供商看起来像这样:

using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using Microsoft.Research.DynamicDataDisplay.Charts.Axes;
using System.Globalization;

namespace Microsoft.Research.DynamicDataDisplay.Charts {
public class TradingLabelProvider : NumericLabelProviderBase {
    private List<DateTime> m_Labels;
    public List<DateTime> Labels {
        get { return m_Labels; }
        set { m_Labels = value; }
    }
    public TradingLabelProvider(DateTime start, List<DateTime> labels) {                                    
        Labels = labels;                                    
    }
    public override UIElement[] CreateLabels(ITicksInfo<double> ticksInfo) {            
        var ticks = ticksInfo.Ticks;
        Init(ticks);            
        UIElement[] res = new UIElement[ticks.Length];
        LabelTickInfo<double> tickInfo = new LabelTickInfo<double> { Info = ticksInfo.Info };
        for (int i = 0; i < res.Length; i++) {
            tickInfo.Tick = ticks[i];
            tickInfo.Index = i;
            string labelText = "";
            if(Convert.ToInt32(tickInfo.Tick) <= Labels.Count && tickInfo.Tick >= 0) {
                labelText = Labels[Convert.ToInt32(tickInfo.Tick)].ToString();
            }
            TextBlock label = (TextBlock)GetResourceFromPool();
            if (label == null) {
                label = new TextBlock();
            }
            label.Text = labelText;
            label.ToolTip = ticks[i].ToString();
            res[i] = label;
            ApplyCustomView(tickInfo, label);
        }
        return res;
    }
}
}

这使我可以在没有空间的情况下一起串在一起,以满足我的要求。我努力尝试使用DateTimeaxis做到这一点,但无济于事。

相关内容

  • 没有找到相关文章

最新更新