我正在尝试绘制股票价格图表的烛台标记。我在交易日的每一分钟都有一个标记 - 上午9:30到下午4:00。我不想在每个交易日的下午4:01到9:29显示空白区域。有没有办法可以从我的X轴上删除我的X轴上的时间跨度?我希望所有数据看起来都是连续的而不会中断流程。我使用NumericAxis作为我的X轴,使用我创建的TickToDateTimeLabelProvider。有没有办法改变LabelProvider以满足我的需求?还是它比那更深?
这是我的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;
}
}
}
答案 0 :(得分:2)
解决了这个问题后,我最终将我的X映射设置为数据在集合中的位置,然后建立新的标签提供程序以将位置更改为我想要的DateTimes。我的新标签提供商看起来像这样:
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来做这件事,但没有用。