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 轴标签重叠的主要内容,如果未能解决你的问题,请参考以下文章