4

株価チャートのローソク足マーカーをチャート化しようとしています。午前 9 時 30 分から午後 4 時まで、取引日の 1 分ごとにマーカーを付けています。各取引日の午後 4 時 1 分から午前 9 時 29 分までの空きスペースを表示したくありません。グラフの X 軸からその期間を削除する方法はありますか? すべてのデータが途切れることなく連続的に見えるようにしたい。私が作成した TickToDateTimeLabelProvider で X 軸に NumericAxis を使用しています。ニーズに合わせて 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;
    }
}
}
4

1 に答える 1

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 でこれを行うのに苦労しましたが、役に立ちませんでした。

于 2012-11-07T21:18:33.050 に答える