2017-01-19 22 views
2

OxyPlotを使用して最後の1か月のデータを示すScatterPlotをプロットしています。しかし、X軸のラベルは重なっています。 X軸は日付時間軸です。Oxyplot:X軸ラベルが重複しないようにする

enter image description here

ここで私は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の設定がありますか?また、ズームイン/ズームアウト時に自動的にラベルを調整することはできますか?

答えて

2

これは私がそれを解決した方法です。

私は、軸のプロパティ '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; 
    } 
}; 
関連する問題