2017-01-19 1 views
2

OxyPlot을 사용하여 지난 한 달 동안의 데이터를 보여주는 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; 
    } 
}; 
관련 문제