WPF (Silverlight ではない) D3 を使用して、Y 軸に文字列を配置することは可能ですか? 具体的には、ステータス値 (「高」、「中」、「低」が 1、0、-1 としてマッピングされているとしましょう) を含むタイムラインのグラフがあり、y 軸にステータスが必要な状況について話しています。数字の代わりにティック...
ありがとう!
WPF (Silverlight ではない) D3 を使用して、Y 軸に文字列を配置することは可能ですか? 具体的には、ステータス値 (「高」、「中」、「低」が 1、0、-1 としてマッピングされているとしましょう) を含むタイムラインのグラフがあり、y 軸にステータスが必要な状況について話しています。数字の代わりにティック...
ありがとう!
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();
上のソリューションを使用しないでください。私のVSを多くのコンパイラエラーにします。VS2013 で 3 時間かけてそのソリューションを試していますが、うまくいきませんでした。関数がグラフを描画するそのソリューションを使用します。
dimSeviyesiAxis.LabelProvider.CustomFormatter = (tickInfo) =>
{
return "%" + tickInfo.Tick.ToString();
};
どの dimSeviyesiAxis が xaml 軸名で、軸ラベルが "%" で始まるか。return の前に、任意の条件文をコーディングできます。ソースリンクは次のとおりです。