直接调用这个类即可,需要下载个GnuPlot安装下。
// Author: Leonardo Tazziniusing 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 gnuplotthis.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 foundif(!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 FormsRectangle 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"); //linespointsgnuPlotSw.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'");elsegnuPlotSw.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;
显示示意: