Windows Form调用R进行绘图并显示
R软件功能非常强大,可以很好的进行各类统计,并能输出图形。下面介绍一种R语言和C#进行通信的方法,并将R绘图结果显示到WinForm UI界面上。
1 前提准备
安装R软件,需要安装32位的R软件,64位的调用会报错。另外就是讲R添加到电脑环境变量中。
打开R软件,安装包 scatterplot3d,演示需要用到此R包。
2 创建项目GraphGenerateByR,项目结构如下:
注意这里需要引入RDotNet类库,可以自行下载:http://rdotnet.codeplex.com/
3 Main窗体代码
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 10 namespace GraphGenerateByR 11 { 12 using RDotNet; 13 public partial class Main : Form 14 { 15 public Main() 16 { 17 InitializeComponent(); 18 } 19 REngine engine = null; 20 21 string Rcode = ""; 22 private void btnPlot_Click(object sender, EventArgs e) 23 { 24 try 25 { 26 if(this.txtRcode.Text=="") 27 { 28 Rcode = @"library('scatterplot3d') 29 z <- seq(-10, 10, 0.01) 30 x <- cos(z) 31 y <- sin(z) 32 scatterplot3d(x, y, z, highlight.3d=TRUE, col.axis='blue', col.grid='lightblue',main='3d绘图',pch=20) 33 "; 34 } 35 else 36 { 37 Rcode = this.txtRcode.Text; 38 } 39 40 //R.3.2.4 41 engine = REngine.GetInstance(); 42 engine.Initialize(); 43 //图片加入GUID,防止重名(还有一种就是先删除后保存) 44 string rnd = System.Guid.NewGuid().ToString().Replace("-", ""); 45 string filename ="i"+ rnd+ "__Rimage.png"; 46 engine.Evaluate(string.Format("png(file='{0}',bg ='transparent',width={1},height={2})", filename, this.ptbGraphic.Width, this.ptbGraphic.Height)); 47 48 //engine.Evaluate(@"x <- (0:12) * pi / 12 49 // y <- cos(x) 50 // plot(x,y); 51 // "); 52 engine.Evaluate(Rcode); 53 engine.Evaluate("dev.off()"); 54 string path = System.IO.Path.GetFullPath(filename); 55 56 Bitmap image = new Bitmap(path); 57 ptbGraphic.Image = image; 58 } 59 catch(Exception ex) 60 { 61 MessageBox.Show(ex.Message); 62 } 63 64 } 65 66 private void Main_FormClosing(object sender, FormClosingEventArgs e) 67 { 68 if(engine!=null) 69 { 70 //clean up 71 engine.Dispose(); 72 } 73 } 74 } 75 }
4 运行:
单击plot后,调用默认R代码,结构如下:
输入合法的R绘图语句,再次单击Plot,结果如下:
水平有限,望各位园友不吝赐教!如果觉得不错,请点击推荐和关注!
出处:http://www.cnblogs.com/isaboy/
声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://www.cnblogs.com/isaboy/
声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。