1.前言:
NPlot為一個開放原始碼程式,是一種在.NET上使用的元件,其最新版軟體版權宣告如下:
NPlot since release 0.9.10.0 has been relicensed and now is distributed under the terms of a 3-clause-BSD license.
雖然NPlot稱不上成熟的繪圖元件,官方發布的版本只到.NET2.0,也無更新版本釋出,某些功能尚不完整,需要自己修改原始碼內容,但是對於一般的繪圖應用基本足夠,在實際應用上也容易操作。
2.說明:
NPlot說明文件
http://netcontrols.org/nplot/wiki/
NPlot軟體在sorceforge下載
http://sourceforge.net/projects/nplot/files/nplot/0.9.10.0/
軟體下載後解壓縮,將bin下的NPlot.dll複製到專案下的bin目錄,加入參考NPlot.dll,加入命名空間using NPlot;
在工具箱加入NPlot元件,完成後在工具箱看到PlotSurface2D的選項,可用拖曳的方式將元件布局在表單中,預設圖表名稱為plotSurface2D1。
繪圖資料來源是由R語言中的mtcars導出dataset。
write.table(mtcars,'d:/tmp/mtcars.csv',row.names=FALSE,sep=',')
讀取數值資料
public DataTable TxtConvertToDataTable(string File, string TableName, string delimiter) { DataTable dt = new DataTable(); DataSet ds = new DataSet(); StreamReader s = new StreamReader(File, System.Text.Encoding.Default); //string ss = s.ReadLine();//skip the first line string[] columns = s.ReadLine().Split(delimiter.ToCharArray()); ds.Tables.Add(TableName); foreach (string col in columns) { bool added = false; string next = ""; int i = 0; while (!added) { string columnname = col + next; columnname = columnname.Replace("#", ""); columnname = columnname.Replace("'", ""); columnname = columnname.Replace("&", ""); if (!ds.Tables[TableName].Columns.Contains(columnname)) { ds.Tables[TableName].Columns.Add(columnname.ToUpper()); added = true; } else { i++; next = "_" + i.ToString(); } } } string AllData = s.ReadToEnd(); string[] rows = AllData.Split("\n".ToCharArray()); foreach (string r in rows) { string[] items = r.Split(delimiter.ToCharArray()); ds.Tables[TableName].Rows.Add(items); } s.Close(); dt = ds.Tables[0]; return dt; }
繪圖
private void PointsPlot(DataTable dt) { //圖表容器基本屬性設定 plotSurface2D1.Clear(); //定義PointPlot Series與資料來源,為主要顯示的資料點 PointPlot points = new PointPlot(); points.DataSource = dt; points.AbscissaData = "WT"; points.OrdinateData = "MPG"; //定義LabelPointPlot Series與資料來源,做為顯示標記符號數值之用 LabelPointPlot lp = new LabelPointPlot(); lp.DataSource = dt; lp.AbscissaData = "WT"; lp.OrdinateData = "MPG"; lp.TextData = "MPG"; //設定標記符號屬性 points.Marker.Type = Marker.MarkerType.Circle;//標記符號型態 points.Marker.Color = Color.Yellow;//標記符號顏色 points.Marker.Size = 8;//標記符號大小 points.Marker.Filled = true;//是否填滿標記符號 points.Marker.Pen.Color = Color.Red;//標記符號border顏色 points.Marker.Pen.Width = 5;//標記符號border寬度 lp.LabelTextPosition = LabelPointPlot.LabelPositions.Above;//標記符號數值位置 lp.Marker.Type = Marker.MarkerType.None;//將此Series的標記符號設為None lp.Marker.Size = 10;//數值與標記符號距離 lp.Font = new Font("Verdana", 8);//標記符號數值字形與大小 //加入Series到圖表容器 plotSurface2D1.Add(points); plotSurface2D1.Add(lp); //圖表容器基本屬性設定 plotSurface2D1.Title = "Points Chart Example";//圖表標題 plotSurface2D1.BackColor = Color.Azure;//圖表背景顏色 plotSurface2D1.XAxis1.Label = "Weight (lb/1000)";//X軸標題 plotSurface2D1.YAxis1.Label = "Miles/Gallon";//Y軸標題 plotSurface2D1.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;//圖表品質設定 plotSurface2D1.PlotBackColor = Color.Azure;//繪圖區背景顏色 //加入繪圖區網格線 Grid grd = new Grid();//網格線實例化 grd.MajorGridPen.Color = Color.Silver;//主網格線顏色 grd.MajorGridPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;//主網格線風格 plotSurface2D1.Add(grd);//網格線加入到圖表容器 plotSurface2D1.Refresh(); }
3.應用:
private void btPlot_Click(object sender, EventArgs e) { //讀取數值資料 DataTable dt = TxtConvertToDataTable(@"D:\TMP\mtcars.csv", "tmp", ","); //繪圖 PointsPlot(dt); }
圖例
文章標籤
全站熱搜