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++] };