具有类别的Oxyplot极图

问题描述

我想用oxyplot创建一个极坐标图。圆轴不应由整数组成,而应由类别组成。 含义不是情节1 ... 10,而是在情节周围说类别A类别B...。 MagnitudeAxis和Angularaxis都不提供为轴设置“字符串”的可能性。 但是,不能使用CategoryAxis绘制极坐标图,因为它不支持角度。

到目前为止,我的代码

var plotModel = new PlotModel { Title = "",}; 
plotModel.Plottype = OxyPlot.Plottype.Polar; 
plotModel.Axes.Add(new OxyPlot.Axes.AngleAxis() 
{ 
    MajorGridlinestyle = Linestyle.solid,//MinorGridlinestyle = Linestyle.Dot,MajorStep = 1,CropGridlines = false,StartAngle = 450,EndAngle = 90,Minimum = 0,Maximum = 19
});

plotModel.Axes.Add(new OxyPlot.Axes.MagnitudeAxis()
{
    MajorGridlinestyle = Linestyle.solid,Maximum = 5,MinorStep = 1
});

var newValues = new OxyPlot.Series.Lineseries { Title = "New Values",strokeThickness = 1 };

int i = 0;

foreach(var daTarow in details)
{
    newValues.Points.Add(new DataPoint(daTarow.NewValue,i++)); //instead of i++ I would like to put a string of the object daTarow,but this is not supported...
}

由于缺乏在线示例和文档,这是我最后寻求帮助的希望...

解决方法

在我看来,您需要LabelFormatter属性。下面的代码在该图的外部创建标签“类别A”,“类别B” ...“类别S”。这样做是因为(char)65是'A',(char)66是'B'等。

plotModel.Axes.Add(new OxyPlot.Axes.AngleAxis()
{
    MajorGridlineStyle = LineStyle.Solid,MajorStep = 1,CropGridlines = false,StartAngle = 450,EndAngle = 90,Minimum = 0,Maximum = 19,LabelFormatter = d => $"Category {(char)(d+65)}"
});
,

根据Rich N的回答,我自己发现了一个(讨厌的)解决方法:

plotModel.Axes.Add(new OxyPlot.Axes.AngleAxis() 
{ 
    MajorGridlineStyle = LineStyle.Solid,//MinorGridlineStyle = LineStyle.Dot,LabelFormatter = d => myCategoryList[Convert.ToInt32(d)] //myCategoryList is a list of strings
});