c#用Gnuplot画图源码

直接调用这个类即可,需要下载个GnuPlot安装下。

复制代码
// Author: Leonardo Tazzini

using System;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Windows.Forms;

/// <summary>
/// Tested with Gnuplot 5.2
/// </summary>
public class GnuPlot
{
    public GnuPlot()
    {
        // Default path for gnuplot
        this.Path = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "gnuplot\\bin\\gnuplot.exe");
        // TODO: Check if path is valid
    }

    public GnuPlot(string path)
    {
        this.Path = path;
    }

    /// <summary>
    /// Path of gnuplot.exe
    /// </summary>
    public string Path { get; set; }

    /// <summary>
    /// Graph input CSV with GnuPlot. NumWaves is the number of channels to draw. If imageOut a PNG image is saved into out.png and displayed. 
    /// </summary>
    public void DrawGraph(string csvFileName, int numWaves, bool generatePngImage = true)
    {
        // gnuplot.exe not found
        if(!File.Exists(Path))
        {
            MessageBox.Show("gnuplot.exe not found. Please check the path.");
            return;
        }

        var gnuPlot = new Process();
        gnuPlot.StartInfo.FileName = Path;
        gnuPlot.StartInfo.CreateNoWindow = true;
        gnuPlot.StartInfo.UseShellExecute = false;
        gnuPlot.StartInfo.RedirectStandardInput = true;
        gnuPlot.Start();

        StreamWriter gnuPlotSw = gnuPlot.StandardInput;
        if (generatePngImage)
        {
            // TODO: Remove dependency from Windows Forms
            Rectangle bounds = Screen.PrimaryScreen.WorkingArea;
            gnuPlotSw.WriteLine("set terminal png size " + (bounds.Width * 0.9) + "," + (bounds.Height * 0.8));
            gnuPlotSw.WriteLine("set out 'out.png'");
        }
        gnuPlotSw.WriteLine("set style data lines");      //linespoints
        gnuPlotSw.WriteLine("set datafile separator ';'");
        //gnuPlotSw.WriteLine("set decimalsign locale; set decimalsign ','");
        gnuPlotSw.WriteLine("set xlabel 'time  (s)'");
        gnuPlotSw.WriteLine("set ylabel 'value (v)'");
        gnuPlotSw.WriteLine("set grid");
        //gnuPlotSw.WriteLine("set xtics 0,0.5");
        //gnuPlotSw.WriteLine("set ytics 0,5");

        // TODO: evaluate add "every .." to gnuplot cmd line    
        gnuPlotSw.Write("plot '" + System.IO.Path.GetFullPath(csvFileName) + "' using 1:2 title 'CH1'");
        if (numWaves == 2)
            gnuPlotSw.WriteLine(", '' using 1:3 title 'CH2'");
        else
            gnuPlotSw.Write("\n");
        gnuPlotSw.Flush();
        if (generatePngImage)
        {
            gnuPlotSw.WriteLine("exit");
            gnuPlotSw.Flush();
            gnuPlot.WaitForExit();
            Process.Start("out.png");
        }
        gnuPlot.Close();
    }


}

读吧数据存为csv,传入DrawGraph即可;数据如下:

TIME(s);CH1(v);

-600.99999949;1.5001;

-599.99999949;-0.0598999999999998;

-598.99999949;-0.0398999999999998;

-597.99999949;-0.0398999999999998;

-596.99999949;-0.0398999999999998;

-595.99999949;-0.0398999999999998;

-594.99999949;-0.0398999999999998;

-593.99999949;-0.0398999999999998;

-592.99999949;-0.0598999999999998;

-591.99999949;-0.0398999999999998;

-590.99999949;-0.0398999999999998;

-589.99999949;-0.0598999999999998;

-588.99999949;-0.0398999999999998;

-587.99999949;-0.0398999999999998;

-586.99999949;-0.0398999999999998;

-585.99999949;-0.0598999999999998;

显示示意:

相关推荐
weixin_460443562 小时前
2026年新修订《网络安全法》实施:Java私有化考试系统如何做好SBOM、漏洞治理与安全升级?
java·开发语言·在线考试系统·企业培训考试系统·宏远培训考试系统·国企培训考试系统·国产化培训系统
Cc.Y5 小时前
Java零基础入门:可变字符串与包装类:StringBuilder、StringBuffer 与 通讯录管理系统实战
java·开发语言·python
阿森_dev5 小时前
2027 届毕设选题怎么选:30 个 Java 方向选题的实现难度排序
java·开发语言·spring boot·毕业设计·课程设计
by209995 小时前
C++ 多态:同一个基类接口,调用不同的函数
开发语言·c++·经验分享·多态
笔墨登场说说5 小时前
flink bin/start-cluster.sh 帮我做成开机启动
开发语言·python
Sarvartha5 小时前
Lambda 表达式和函数式接口
java·开发语言
kimloner6 小时前
开源一个 376KB 的 Windows 桌面小工具:便签 + 截图标注 + OCR + 待办提醒(C# / WinForms)
windows·开源·c#·ocr·winforms
小白学大数据6 小时前
拼多多反爬对抗实战:Scrapy 中间件化采集架构解析
开发语言·scrapy·中间件·架构
学逆向的6 小时前
win32注入代码
开发语言·网络安全·api·win32
阿松爱学习7 小时前
【Unity开发】Aspose.PDF的使用
unity·pdf·c#