使用WPF(不是Silverlight)D3,是否可以在Y轴上放置字符串?
我特别是在谈论一种情况,其中有一个带有状态值的时间轴图(假设“ High”,“ Medium”和“ Low”分别映射为1、0和-1),并且希望在y轴上显示状态刻度而不是数字...

谢谢!

最佳答案

您可以使用LabelProvider实现所需的效果。您将必须创建一个新的LabelProvider类,该类源自LabelProviderBase,或更具体而言,取决于您的案例NumericLabelProviderBase。您应该能够使用所有的刻度(1,0-1),并使用新LabelProviderClass中的if或switch将它们更改为字符串。标签提供者来源中有大量示例,您可以以此为基础。

您要覆盖的方法是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();

关于c# - WPF DynamicDataDisplay-将字符串放入Y轴而不是数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13364917/

10-12 12:22
查看更多