[C#] OxyPlot Tips집
본고에 대해서
.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의 사용 자체를 포기했다.
Reference
이 문제에 관하여([C#] OxyPlot Tips집), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/laughter/items/422e25a6b3150a3199e7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
차트 보기를 업데이트하고 싶습니다.
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의 사용 자체를 포기했다.
Reference
이 문제에 관하여([C#] OxyPlot Tips집), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/laughter/items/422e25a6b3150a3199e7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
꺾은선형 차트를 부드럽게 하고 싶습니다.
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의 사용 자체를 포기했다.
Reference
이 문제에 관하여([C#] OxyPlot Tips집), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/laughter/items/422e25a6b3150a3199e7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
series.CanTrackerInterpolatePoints = false;
var controller = new PlotController();
controller.UnbindMouseDown(OxyMouseButton.Left);
controller.BindMouseEnter(PlotCommands.HoverSnapTrack);
plotView.Controller = controller;
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}";
model.TrackerChanged += (sender, e) => plotView.HideTracker();
차트 내에 (그래프 이외의) 선을 끌고 싶다. 그 선에 설명을위한 문자열을 배치하고 싶습니다.
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의 사용 자체를 포기했다.
Reference
이 문제에 관하여([C#] OxyPlot Tips집), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/laughter/items/422e25a6b3150a3199e7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
var exporter = new PngExporter
{
Width = plotView.Width,
Height = plotView.Height,
Background = OxyColors.White,
};
var bitmap = exporter.ExportToBitmap(model);
Reference
이 문제에 관하여([C#] OxyPlot Tips집), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/laughter/items/422e25a6b3150a3199e7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)