csharp-OXYPlot开源绘图库

NuGet 安装 oxyplot core 和 wpf 两个包

<Window x:Class="Stocker.Win.WinStockCanvas"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Stocker.Win"
xmlns:oxy="http://oxyplot.org/wpf"
mc:Ignorable="d"
Title="WinStockCanvas" Height="450" Width="800">
<Grid x:Name="canvas_grid" Grid.Row="1" SizeChanged="canvas_grid_SizeChanged" Width="auto" Height="auto">
<Border HorizontalAlignment="Center" VerticalAlignment="Center" BorderBrush="Gray"
BorderThickness="0" Background="#1e1e1e" Margin="0">
<oxy:PlotView x:Name="plot" Width="auto" Height="auto" Model="{Binding PModel}" />
</Border>
</Grid>
</Window>

public PlotModel MyModel { get; private set; }

draw_blank();

public void draw_blank()
{
MyModel = new PlotModel { Title = "绘图演示" };
MyModel.Background = OxyColor.FromRgb(0x1E, 0x1E, 0x1E);// visual studio 黑色
MyModel.TextColor = OxyColors.White;
MyModel.PlotAreaBorderColor = OxyColors.Gray;
MyModel.Axes.Add(new LinearAxis
{
Title = "Y轴标题",
Position = AxisPosition.Left,
MaximumPadding = 0.3,
MinimumPadding = 0.3,
AxislineColor = OxyColors.White,
// 轴线 样式和颜色
MajorGridlineStyle = LineStyle.LongDashDot,
MajorGridlineColor = OxyColors.Gray,

// 刻度颜色
TicklineColor = OxyColors.Gray,
});
MyModel.Axes.Add(new LinearAxis
{
Title = "X轴标题",
Position = AxisPosition.Bottom,
MajorGridlineStyle = LineStyle.LongDashDotDot,
MajorGridlineColor = OxyColors.Gray,
TicklineColor = OxyColors.Gray,
});
}

private void draw_demo()
{
//MyModel = new PlotModel { Title = "绘图演示" };
var ls = new LineSeries
{
Title = "叠加后的正弦波",
Color = OxyColor.FromRgb(0xFF, 0xD7, 0x00),
};
int n = 25;
for (double x = -10; x < 10; x += 0.0001)
{
double y = 0;
for (int i = 0; i < n; i++)
{
int j = i * 2 + 1;
y += Math.Sin(j * x) / j;
}
ls.Points.Add(new DataPoint(x, y));
}

MyModel.Series.Add(ls);
plot.InvalidatePlot();
}

private void btn_clear_Click(object sender, RoutedEventArgs e)
{
MyModel.Series.Clear();
plot.InvalidatePlot();
}

鼠标事件

默认
滚轮缩放
双击滚轮 恢复原图
左键长按查看数据
右键长按移动图形

// 十字光标
LineAnnotation crosshair_v = new LineAnnotation();
crosshair_v.Type = LineAnnotationType.Vertical;
crosshair_v.Color = OxyColors.Gray;
crosshair_v.StrokeThickness = 0.5;
crosshair_v.LineStyle = LineStyle.Solid;

LineAnnotation crosshair_h = new LineAnnotation();
crosshair_h.Type = LineAnnotationType.Horizontal;
crosshair_h.Color = OxyColors.Gray;
crosshair_h.StrokeThickness = 0.5;
crosshair_h.LineStyle = LineStyle.Solid;

PModel.Annotations.Add(crosshair_v);
PModel.Annotations.Add(crosshair_h);

PModel.MouseMove += (s, e) =>
{
if (crosshair_v != null && crosshair_h != null)
{
var dp = Axis.InverseTransform(e.Position, xAxis, yAxis);

crosshair_v.X = dp.X;
crosshair_v.Y = 0;

crosshair_h.X = 0;
crosshair_h.Y = dp.Y;

PModel.InvalidatePlot(false);
e.Handled = true;
}
};

背景色

PModel = new PlotModel { Title = "" };
PModel.Background = OxyColor.FromRgb(0x1E, 0x1E, 0x1E);// visual studio 黑色

XY轴成比例缩放

将两个轴上的MajorStep设置为相同:
可能还需要控制其他类似的属性:MinorStep,MajorTickSize和MinorTickSize。
另请注意,标签放在Major Ticks上。

<oxy:Plot.Axes>
<oxy:LinearAxis ... MajorStep="1"/>
<oxy:LinearAxis ... MajorStep="1"/>
</oxy:Plot.Axes>

绘图属性

MarkerStrokeThickness:影响绘图点的大小
StrokeThickness:影响绘图曲线的粗细程度
Color:影响绘图曲线的颜色
MajorGridlineStyle,MinorGridlineStyle:设置坐标轴中每一大格网格线和每一小格网格线的样式,这里选择大格网格线为实线,小格网格线为虚线
MajorGridlineColor,MinorGridlineColor:影响各网格线的颜色

var ls = new LineSeries
{
Title = "Raw Data",
Color = m_list_colors[m_color_index++]
};