OxyPlot:如何使用轴标签格式化程序并显示Y轴标签?

3

我正在使用Oxyplot在我的Xamarin.iOS项目中绘制条形图。

这是目前我的图表看起来的样子:

enter image description here

我想要将x轴上的数字值替换为太阳、星期一、星期二等文本,而不是数字。

我看到CategoryAxis有一个名为LabelFormatter的方法,它返回Func<double, string>,但我该如何使用它呢?

还有为什么Y轴上的标签没有显示出来?

public class MyClass
{
    /// <summary>
    /// Gets or sets the plot model that is shown in the demo apps.
    /// </summary>
    /// <value>My model.</value>
    public PlotModel MyModel { get; set; }

    /// <summary>
    /// Initializes a new instance of the <see cref="OxyPlotSample.MyClass"/> class.
    /// </summary>
    public MyClass()
    {

        var model = new PlotModel { Title = "ColumnSeries" };
        model.PlotAreaBorderColor = OxyColors.Transparent;
        // A ColumnSeries requires a CategoryAxis on the x-axis.

        model.Axes.Add(new CategoryAxis()
        {
            Position = AxisPosition.Bottom,
            MinorTickSize = 0,
            MajorTickSize = 0,
            //MajorGridlineStyle = LineStyle.Solid,
            //MinorGridlineStyle = LineStyle.Solid,
        });

        model.Axes.Add(new LinearAxis()
        {
            AxislineStyle = LineStyle.None,
            Position = AxisPosition.Left,
            MinorTickSize = 0,
            MajorTickSize = 0,
            MajorGridlineStyle = LineStyle.Solid,
            MinorGridlineStyle = LineStyle.Solid,
            Minimum = 0,
            Maximum = 400,
        });

        var series = new ColumnSeries();
        series.Items.Add(new ColumnItem() { Value = 200, Color = OxyColors.Orange});
        series.Items.Add(new ColumnItem(200));
        series.Items.Add(new ColumnItem(300));
        series.Items.Add(new ColumnItem(100));
        series.Items.Add(new ColumnItem(200));
        series.Items.Add(new ColumnItem(100));
        series.Items.Add(new ColumnItem(130));

        model.Series.Add(series);

        this.MyModel = model;
    }
}
1个回答

8
为了在轴上显示标签,您需要指定MajorStep属性,Oxyplot将仅绘制与主步长匹配的标签。
model.Axes.Add(new LinearAxis()
{
    MajorStep = 10,
    Position = AxisPosition.Left,
    ...
});

如果要修改带有日期名称的标签,您可以使用DateTimeAxis替代LinearAxis

model.Axes.Add(new DateTimeAxis()
{
    StringFormat = "ddd",
    Position = AxisPosition.Bottom,
    ...
});

如果您需要更加个性化的内容,您需要使用LabelFormatter属性。

编辑:

类别轴中的标签:

var categoryAxis = new CategoryAxis()
{
    Position = AxisPosition.Bottom,
    ...
};

categoryAxis.ActualLabels.Add("Mon");
categoryAxis.ActualLabels.Add("Tue");
categoryAxis.ActualLabels.Add("Wed");
categoryAxis.ActualLabels.Add("Thu");
categoryAxis.ActualLabels.Add("Fri");
categoryAxis.ActualLabels.Add("Sat");
categoryAxis.ActualLabels.Add("Sun");

Model.Axes.Add(categoryAxis);

CategoryAxis.ActualLabels 是只读的,因此您必须逐一添加项目。


但是,要绘制列系列图,我不是必须添加一个CategoryAxis()作为X轴吗? - Drunken Daddy
我已经编辑了答案,我认为这就是你想要实现的。 - Jose
谢谢。那个有效。我感谢你回答我的第二个问题,展示Y轴水平。-_- - Drunken Daddy
目前,Y 值为 0,下一个 Y 值为 500,只有当我向上滚动时才能看到。如何在每个网格线上显示 Y 值? - Drunken Daddy
1
你是否指定了 Major Step = 100?因为我尝试过它,而且它有效。也许我没有理解你的问题,你能再具体说明一下吗? - Jose

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接