c# 使用 Oxyplot 创建和绘制 ContourSeries

文章讲述了作者在WPF应用程序中使用Oxyplot实现2D数据可视化,从HeatMapSeries转换到ContourSeries的过程中遇到的问题,发现ColumnCoordinates和RowCoordinates数组与Data数组大小匹配的重要性。最终解决了等高线图对齐问题,并提及StackOverflow上的相关资源。
摘要由CSDN通过智能技术生成

我有一个 WPF 应用程序,我需要在其中可视化 y = y(x1, x2),其中 x1、x2 是线性坐标。我可以使用 Oxyplot 中的 HeatMapSeries 来做到这一点,但是当我想在同一窗口中绘制两组数据时,热图不是合适的工具。几个轮廓系列会更好。 现在,我尝试以与 HeatMapSeries 相同的方式实现这一点,效果非常好:

<span style="color:#212529"><span style="background-color:#c1e6c6"><span style="color:#212529"><code style="margin-left:2px"><span style="color:#000000">public</span> <span style="color:#000000">void</span> <span style="color:#000000">PlotHeatMap</span> (){

   OxyPlot.PlotModel model = <span style="color:#000000">new</span> PlotModel { Title = <span style="color:#000000">"2-D data"</span> };
   model.Axes.Add( <span style="color:#000000">new</span> OxyPlot.Axes.LinearColorAxis { 
   Position = OxyPlot.Axes.AxisPosition.Right, 
   Palette = OxyPalettes.Jet( <span style="color:#ae7313">500</span> ), 
   HighColor = OxyColors.Gray, 
   LowColor = OxyColors.Black } );

   OxyPlot.Series.HeatMapSeries heatmap = <span style="color:#000000">new</span> OxyPlot.Series.HeatMapSeries {
     Data = ( Double[ , ] )data,
     X0 = x1min,
     X1 = x1max,
     Y0 = x2min,
     Y1 = x2max
    };

   model.Series.Add( heatmap );
}
</code></span></span></span>

Output from the HeatMapSeries

现在,当我尝试改用 ContourSeries 时,我只是将 HeatMapSeries 替换为 ContourSeries:

<span style="color:#212529"><span style="background-color:#c1e6c6"><span style="color:#212529"><code style="margin-left:2px"><span style="color:#000000">public</span> <span style="color:#000000">void</span> <span style="color:#000000">PlotContour</span> (){

   OxyPlot.PlotModel model = <span style="color:#000000">new</span> PlotModel { Title = <span style="color:#000000">"2-D data"</span> };
   model.Axes.Add( <span style="color:#000000">new</span> OxyPlot.Axes.LinearColorAxis { 
   Position = OxyPlot.Axes.AxisPosition.Right, 
   Palette = OxyPalettes.Jet( <span style="color:#ae7313">500</span> ), 
   HighColor = OxyColors.Gray, 
   LowColor = OxyColors.Black } );

   OxyPlot.Series.ContourSeries contour = <span style="color:#000000">new</span> OxyPlot.Series.ContourSeries {
      ColumnCoordinates = arrayFromMinToMax1,
      RowCoordinates = arrayFromMinToMax2,
      ContourLevels = arrayOfLevels,
      ContourColors = arrayOfColors, <span style="color:#6c6b5a">// Same # elements as the levels' array</span>
      Data = ( Double[ , ] )data
    };

   model.Series.Add( contour );
}
</code></span></span></span>

这只会产生输出:

Output from the ContourSeries attempt

x 轴和 y 轴在那里,并且与最小和最大坐标匹配,但我看不到等高线。我怀疑设置 Axis 时缺少某些东西(它应该与 HeatMapSeries 相同吗??)。我不知道如何处理这个等高线图。除了例如,还有其他例子吗? GitHub 上的 ContourSeriesExamples?

感谢您的帮助!

最佳答案

我终于找到问题所在了——是我的错! ColumnCoordinates 和 RowCoordinates 数组必须与 DoubleArray Data 的大小相匹配!我不确定他们是。现在轮廓和热图对齐了!感谢 Anders 的支持并插入我编写自己的代码!

HeatMap with Contour

关于c# - 如何使用 Oxyplot 创建和绘制 ContourSeries?

我们在Stack Overflow上找到一个类似的问题: c# - How do I create and plot a ContourSeries with Oxyplot? - Stack Overflow

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于C#使用Oxyplot绘制监控界面的问题,我可以给你一些简单的指导。 首先,你需要在Visual Studio中安装Oxyplot包。可以通过NuGet包管理器来安装Oxyplot。 接下来,你需要创建一个新的Windows窗体应用程序。在窗体中添加一个Oxyplot控件,并设置其大小和位置。 然后,你需要编写代码来绘制监控界面。例如,你可以使用Oxyplot的LineSeries类来绘制一条折线图,并使用Oxyplot的Axis类来设置坐标轴。这里是一个简单的示例代码: ``` using OxyPlot; using OxyPlot.Axes; using OxyPlot.Series; public partial class Form1 : Form { public Form1() { InitializeComponent(); // 创建一个新的OxyPlot图表 var plotModel = new PlotModel(); // 创建一个新的线性轴 var xAxis = new LinearAxis() { Position = AxisPosition.Bottom, Title = "时间" }; var yAxis = new LinearAxis() { Position = AxisPosition.Left, Title = "数据" }; // 添加轴到图表中 plotModel.Axes.Add(xAxis); plotModel.Axes.Add(yAxis); // 创建一个新的LineSeries并添加数据点 var lineSeries = new LineSeries() { Title = "数据", MarkerType = MarkerType.Circle, MarkerSize = 4, MarkerStroke = OxyColors.White, MarkerFill = OxyColors.Blue }; lineSeries.Points.Add(new DataPoint(0, 1)); lineSeries.Points.Add(new DataPoint(1, 2)); lineSeries.Points.Add(new DataPoint(2, 3)); lineSeries.Points.Add(new DataPoint(3, 4)); lineSeries.Points.Add(new DataPoint(4, 5)); // 添加LineSeries到图表中 plotModel.Series.Add(lineSeries); // 将OxyPlot控件的Model属性设置为我们创建的图表 plotView1.Model = plotModel; } } ``` 这段代码将在窗体中创建一个OxyPlot控件,并绘制一条包含五个数据点的折线图。 当然,这只是一个简单的示例,你可以根据自己的需求来编写更加复杂的代码来实现监控界面。希望这些指导对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值