[C#] OxyPlot Tips집

10334 단어 OxyPlotC#.NET

본고에 대해서



.NETFramework4.6.2, C#7.3, WinForms 환경에서, MSChart로부터의 대체를 노리고, OxyPlot을 사용했을 때, 조사하거나 곤란한 포인트의 정리.
WinForms 이외, WPF 등에도 공통되는 부분이 많다고 생각한다.
사용하고 있는 OxyPlot은 NuGet에서 손에 넣는, 2016/09/12 공개의 것.

샘플 코드 내에서는 PlotModel 오브젝트를 model , PlotView 오브젝트를 plotView , Series 오브젝트를 series

기본 사항



차트 보기를 업데이트하고 싶습니다.


model.InvalidatePlot(true);

차트 크기 조정 및 그리기 범위 선택을 재설정하고 싶습니다.


model.ResetAllAxes();

마우스 조작으로서는, 중간 버튼(마우스 휠)을 더블 클릭한다.
htps : // 이 m / 7, f9 / ms / 4b2, 네, 6f161, c39, 757

코드에서 투명 색상을 지정하려면 어떻게 해야 합니까?



화이트와 블랙과 같이 색상을 지정하려면 OxyColors를 사용하십시오.
투명색은 OxyColors.Transparent 가 된다.

차트가 실선으로 둘러싸여 있는 것이 마음에 들지 않는다.


model.PlotAreaBoarderThickness = new OxyThickness(0);

Axis



확대 축소, 표시 범위 변경을 감지하고 싶습니다.


Axis 오브젝트의 AxisChanged , TransformChanged 이벤트를 사용한다.

현재 표시하고 있는 범위의 최대치, 최소치는 어떤 프로퍼티?


Axis 객체의 AcutalMaximum , ActualMinimum 속성.

축의 스케일을 로그로 만들고 싶습니다.


LogarithmicAxis 클래스를 사용한다.

시리즈



꺾은선형 차트를 부드럽게 하고 싶습니다.


LineSeries 개체의 Smooth 속성을 true ht tp // // 아쿠-sh. 하테나 bぉg. 코 m / 엔 트리 / 오 xyp ぉ t mp ぇ 토끼

차트의 데이터에서 마우스 클릭을 감지하고 싶습니다.


Series 오브젝트의 MouseDown 이벤트를 사용한다.

Tracker (ToolTip)



차트의 데이터를 왼쪽 클릭하면 표시되는 작은 창(ToolTip)을 OxyPlot에서는 Tracker라고 부른다.

꺾은선형 차트에서 배치한 점과 점 사이에 Tracker를 표시하지 않으려면


series.CanTrackerInterpolatePoints = false;

Tracker의 표시에 왼쪽 클릭이 필요하지만, 마우스 커서가 겹쳤을 때 표시해 주었으면 한다


var controller = new PlotController();

controller.UnbindMouseDown(OxyMouseButton.Left);
controller.BindMouseEnter(PlotCommands.HoverSnapTrack);

plotView.Controller = controller;

Tracker에 표시되는 데이터의 형식을 변경하고 싶습니다.


Series 객체의 TrackerFormatString 속성을 사용합니다.
ht tp // // 아쿠-sh. 하테나 bぉg. 코 m / 엔 트리 / 오 xyp ぉ t mp ぇ 토끼

Tracker에 Series나 Axis의 Title이나 X, Y의 값 이외를 표시하고 싶다


IDataPointProvider 를 구현한다 MyDataPoint 형을 준비해, Series 오브젝트의 ItemsSource 프로퍼티에 MyDataPoint 의 집합을 준다.
그러면 TrackerFormatString 속성 중에서 MyDataPoint 속성을 호출할 수 있습니다.
class MyDataPoint : IDataPointerProvider
{
    public double X { get; }
    public double Y { get; }
    public double XY => X * Y;

    public MyDataPoint(double x, double y) { X = x; Y = y; }
    public DataPoint GetDataPoint() => new DataPoint(X, Y);
}

var array = new MyDataPoint[100];
for (int i = 0; i < MyDataPoint.Length; i++)
    array[i] = new MyDataPoint(i, i * i);

seires.ItemsSource = array;
sereis.TrackerFormatString = "X = {X}, Y = {Y}, XY = {XY}";

Tracker의 배경색을 변경하고 싶습니다.



WinForms 환경의 경우, ShowTracker 메소드내에서 BackColor = Color.LightSkyBlue 가 되어 있으므로, 바꿀 수 없는 것 같다.
다른 환경이라면 어떻게 될지.

Tracker라든지 필요 없다. 표시하고 싶지 않음


model.TrackerChanged += (sender, e) => plotView.HideTracker();

Annotation



차트 내에 (그래프 이외의) 선을 끌고 싶다. 그 선에 설명을위한 문자열을 배치하고 싶습니다.


LineAnnotation 클래스를 사용한다.

LineAnnotation의 TextHorizontalAlignment를 변경해도 선의 왼쪽에 문자열을 배치 할 수 없습니다.



할 수 없기 때문에, 문자열 배치용의 PointAnnotation 를 병용하기로 했다.

차트에 사각형으로 강조된 범위를 표시하고 싶습니다. 그 범위에 설명용 문자열을 배치하고 싶습니다.


RectangleAnnotation 클래스를 사용한다.
문자열은 항상 사각형의 중앙에 표시되므로 걱정하지 않으면 설명용 문자열은 PointAnnotation로 표시하면 된다.

PointAnnotation의 TextHorizontalAlignment, TextVerticalAlignment가 생각한대로 작동하지 않습니다.



Left, Bottom에서 점의 오른쪽 상단에 Right, Top에서 점의 왼쪽 하단에 문자열이 표시됩니다.


기타



차트의 내용을 이미지로 저장하고 싶습니다.


PngExporter 클래스를 사용한다.
var exporter = new PngExporter
{
    Width = plotView.Width,
    Height = plotView.Height,
    Background = OxyColors.White,
};
var bitmap = exporter.ExportToBitmap(model);

OxyPlot.Series.XYAxisSeries.GetNearestPointInternal 메서드 내에서 ArgumentNullException이 발생합니다.




htps : // 기주 b. 코 m / xypぉt / xypぉt / 이스에 s / 931
3년 전에 Issue로 등록되어 있지만 아직 Close되지 않았기 때문에 미대응인 것은 아니다.
이것이 어쨌든, OxyPlot의 사용 자체를 포기했다.

좋은 웹페이지 즐겨찾기