2

WPF (Silverlight ではない) D3 を使用して、Y 軸に文字列を配置することは可能ですか? 具体的には、ステータス値 (「高」、「中」、「低」が 1、0、-1 としてマッピングされているとしましょう) を含むタイムラインのグラフがあり、y 軸にステータスが必要な状況について話しています。数字の代わりにティック...

ありがとう!

4

2 に答える 2

3

LabelProvider を使用して、目的の効果を実現できます。LabelProviderBase、または具体的には NumericLabelProviderBase から派生した新しい LabelProvider クラスを作成する必要があります。持っているすべてのティック (1,0-1) を取得し、新しい LabelProviderClass の if またはスイッチを使用してそれらを文字列に変更できるはずです。ラベル プロバイダーのソースには、ベースとして使用できる例がたくさんあります。

オーバーライドしようとしているメソッドは CreateLabels です。これは、私が思いついた簡単な方法であり、(うまくいけば!) 必要な場所に移動できます。作成した新しいクラスに実装します。

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) == 1) {
                labelText = "High";
            } else if(Convert.ToInt32(tickInfo.Tick) == 0) {
                labelText = "Medium"
            } else if(Convert.ToInt32(tickInfo.Tick) == -1) {
                labelText = "Low"
            } else {
                labelText = ""
            }

            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;
    }

この新しい LabelProvider を ChartPlotter に割り当てるには、XAML でラベルを付ける軸に名前を付けるか、C# でオブジェクトとして作成します。

yAxis.LabelProvider = new ZazkapulskLabelProvider();
于 2012-11-13T21:28:14.470 に答える
0

上のソリューションを使用しないでください。私のVSを多くのコンパイラエラーにします。VS2013 で 3 時間かけてそのソリューションを試していますが、うまくいきませんでした。関数がグラフを描画するそのソリューションを使用します。

 dimSeviyesiAxis.LabelProvider.CustomFormatter = (tickInfo) =>
        {
            return "%" + tickInfo.Tick.ToString();
        };

どの dimSeviyesiAxis が xaml 軸名で、軸ラベルが "%" で始まるか。return の前に、任意の条件文をコーディングできます。ソースリンクは次のとおりです。

http://dynamicdatadisplay.codeplex.com/discussions/462842

于 2014-04-19T14:58:59.073 に答える