问题描述
我想用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
});