【问题标题】:Plotting with C# [closed]用 C# 绘图 [关闭]
【发布时间】:2010-10-07 17:08:20
【问题描述】:

C# 似乎在科学计算方面显示出一些前景,但我发现很少有人能绘制 2D 图,这对理科学生和科学家来说都非常重要。

是否有可靠、免费的方法来使用 C# 创建具有出版质量的 2D 绘图?并且能够保存为多种格式(png、eps、...)。类似于 Python 的 matplotlib 的东西?

【问题讨论】:

    标签: c# plot scientific-computing


    【解决方案1】:

    我推荐的是OxyPlot。它包含 WPF、Metro、Silverlight、Windows Forms、Avalonia UI、XWT 的软件包。除了图形,它还可以导出为 SVG、PDF、Open XML 等。它甚至支持 Android 和 iOS 的 Mono 和 Xamarin。它也在积极开发中。

    还有一个新的(至少对我而言)开源 .NET 绘图库,名为 Live-Charts。情节非常互动。库支持 WPF、WinForms 和 UWP。 Xamarin 已计划。该设计是针对 MV* 模式进行的。 但是@Paweł Audionysos 认为 Live-Charts WPF 的性能并不是那么好。

    【讨论】:

    • 我刚刚测试了这两个库。 Oxyplot API 看起来有点奇怪,并且没有很好的文档记录。我一直在努力绘制简单的 float[] 而不是示例中所示的函数。实时图表在乞讨时看起来很棒。 Giffs 看起来令人印象深刻,API 看起来更好,有据可查,很多例子,但是......它的性能是不可接受的。它挂起 20 秒只是为了显示 4K 浮点数。即使有 400 也有点窒息 :( 他们提供了一些付费的、更快的版本,可以更直接地使用 DirectX,但我不认为......我知道性能如此差不是 WPF 的错。
    • 根据我的个人经验,WPF 能够显示和平移超过 100K 行,即使我的代码未优化。他们必须使用像 Line 这样的 WPF 原语,或者我不知道,但是在 800x600 视图中渲染的 4K 什么都不是……事件 LINQPad Chart 可以在第二秒内渲染 100K 行。无论如何,如果您打算绘制几个样本,我会建议读者尝试其他方法。
    • 关于性能。我使用了大约 1 亿个点。顺便说一句,Oxiplot 有一个带有性能测试示例的浏览器。是的,如果你有大数据,你必须做一些考虑,但它是可行的并且不是那么复杂。
    • 文档 - 查看示例代码。作为文档非常好用。确实有些案例很难用谷歌搜索。但是社区通过 github 问题回答问题。毕竟是免费图书馆。编写文档,向社区还债
    • 我没有说 Oxiplot 表现不佳,但 Live-Charts 确实如此。当然,如果您优化输入,您可以绘制数百万个点,我什至在 ActionScript 中编写了带有缩放和平移功能的整首歌波形文件的绘图,但这需要重新采样,我希望绘图库能为我做......但即使没有任何特殊的优化,4K 线的阻塞都意味着图书馆发生了一些不好的事情。无论如何,在尝试了更多库之后,我目前正在使用易于使用且非常灵活的 Windows Forms Chart 组件。如果您想要免费选项,我认为最好的选择。
    【解决方案2】:

    我只是想补充 MajesticRa 对OxyPlot 的推荐,并指出 OxyPlot 如何用于各种绘图案例。该软件是免费和开源的,非常精致,并且允许在普通 2D 映射之外进行多种用途。

    我一直在将 OxyPlot 用于一个非正统的项目,我在其中显示(在 WPF/C# 中)一个地图(机器人占用网格),我可以用 LineSeries(行进路径)和 PointSeries(路点)覆盖它。使用 OxyPlot ImageAnnotation 功能,我可以在我的 OxyPlot 中显示 60Hz 视频,方法是定期更新其自己的线程上的 ImageAnnotation,同时将一系列点映射到视频之上。背景视频和点甚至是可扩展和可翻译的。

    希望这对其他希望在图像和视频之上显示绘图的人有所帮助。

    【讨论】:

      【解决方案3】:

      几天前我开始使用新的 ASP.NET 图表控件,它的功能绝对令人惊叹。

      Here is the link.

      编辑:这显然仅适用于您使用 ASP.NET。不确定 WinForms。

      【讨论】:

      【解决方案4】:

      ZedGraph 是个不错的选择。

      【讨论】:

      • ZedGraph 在小型应用程序方面也取得了成功
      • ZedGraph 非常适合小型应用程序。
      • 是我,还是 ZedGraph 丑?我错过了使它看起来不错的选项吗?
      【解决方案5】:

      gnuplot 是一个在科学界广泛使用的积极维护的程序。通常绘图是从可以在 C# 程序中写出的数据文件生成的,但也可以从 C# 调用 gnuplot 可执行文件并将生成的图像显示在 C# 图片框中。

      【讨论】:

      • 是否有任何类似于 gnuplot 的 C# 原生绘图库?当它需要调用其他进程时,我对使用这样的东西有点犹豫。
      【解决方案6】:

      NPlot 是一个相当不错的简单开源 2D 绘图 API。不幸的是,该网站已关闭。我不知道这是否只是暂时的。我没有听说任何坏消息。它可能会恢复。

      http://www.nplot.com

      这是一篇描述它的文章:

      http://aspnet.4guysfromrolla.com/articles/072507-1.aspx

      上一篇文章使用的是 VB.NET,但显然这适用于 C#。

      同样,不知道为什么 nplot 的网站目前无法运行,但它是我过去使用过的一种流行的绘图 API。我将其发布以供您参考,如果发生可能的事件,nplot 将很快备份。 :)

      编辑:

      感谢 Hosam Aly,看来 SourceForge 项目仍然可以在此处访问:

      http://sourceforge.net/projects/nplot

      【讨论】:

      【解决方案7】:

      Samples Environment for Microsoft Chart Controls:

      Microsoft Chart Controls for .NET Framework 的示例环境包含 200 多个ASP.NET 和 Windows 窗体示例。这些示例涵盖了 .NET Framework 的图表控件中的所有主要功能。它们使您能够查看 Chart 控件的运行情况,并将代码用作您自己的 Web 和 Windows 应用程序的模板。

      似乎更面向商业,但可能对理科学生和科学家有一些价值。

      【讨论】:

      • 链接已失效。是否还有一些文档或者这个项目已经死了?
      猜你喜欢
      • 2011-05-16
      • 1970-01-01
      • 2013-10-27
      • 1970-01-01
      • 2011-07-03
      • 2010-11-19
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多