Oxyplot:防止 X 轴标签重叠

Posted

技术标签:

【中文标题】Oxyplot:防止 X 轴标签重叠【英文标题】:Oxyplot: Prevent X-Axis label from overlapping 【发布时间】:2017-06-03 16:32:38 【问题描述】:

我正在使用 OxyPlot 绘制一个显示最近一个月数据的 ScatterPlot。但是 X 轴标签是重叠的。 X轴是日期时间轴。

这是我用来获取 X 轴的函数。

DateTimeAxis GetXAxis ()

    var axis = new DateTimeAxis 
        Position = AxisPosition.Bottom,
        MinorIntervalType = DateTimeIntervalType.Days,
        MinorTickSize = 0,
        MajorTickSize = 0,
        MajorGridlineStyle = LineStyle.None,
        MinorGridlineStyle = LineStyle.None,
        FontSize = 8,
        TextColor = OxyColor.Parse (ColorHex.DarkGray),
        Maximum = DateTimeAxis.ToDouble (DateTime.Now),
        MajorStep = 1,
    ;
    if (type == Constants.QUESTION_ANSWER_TYPE_WEEK) 
        axis.Minimum = DateTimeAxis.ToDouble (DateTime.Now.AddDays (-7));
        axis.StringFormat = "ddd";
     else if (type == Constants.QUESTION_ANSWER_TYPE_MONTH) 
        axis.Minimum = DateTimeAxis.ToDouble (DateTime.Now.AddDays (-30));
        axis.StringFormat = "MMM dd";
     else 
        axis.StringFormat = "MMM dd";
    
    return axis;

如何防止它们重叠?我需要手动跳过标签吗?或者 oxyplot 中是否有自动执行此操作的设置?另外,是否可以在放大和缩小时自动调整标签?

【问题讨论】:

【参考方案1】:

我就是这样解决的。

我利用了轴的属性“MajorStep”。

var axis = new DateTimeAxis ();
...

DateTime maxDate = .... // Max of DateTime from my data
DateTime minDate = .... // Min of Datetime from my data
double totalDays = (MaxDate - MinDate).TotalDays;
if (totalDays > 8)
    axis.MajorStep = (MaxDate - MinDate).TotalDays / 8; // I want to show only 8 labels on X-Axis

并在放大和缩小时调整标签:

axis.AxisChanged += (sender, e) => 
    if (e.ChangeType == AxisChangeTypes.Zoom) 
        axis.MajorStep = (DateTimeAxis.ToDateTime (axis.ActualMaximum) - DateTimeAxis.ToDateTime (axis.ActualMinimum)).TotalDays / 8;
    
;

【讨论】:

以上是关于Oxyplot:防止 X 轴标签重叠的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Oxyplot 创建方形绘图区域

鼠标滚轮时的oxyplot轴锁定中心

在oxyplot(C#WPF)中将两个y轴分配给两个lineseries

同一LineSeries的多色标记-OxyPlot

如何防止 sns.countplot 中的 x 轴标签重叠

OxyPlot 添加 PlotModel