博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows Form调用R进行绘图并显示
阅读量:6235 次
发布时间:2019-06-22

本文共 2765 字,大约阅读时间需要 9 分钟。

  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 GraphGenerateByR11 {12     using RDotNet;13     public partial class Main : Form14     {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             try25             {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                 else36                 {37                     Rcode = this.txtRcode.Text;38                 }39 40                 //R.3.2.441                 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 / 1249                 //                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 up71                 engine.Dispose();72             }73         }74     }75 }

 

4 运行:

单击plot后,调用默认R代码,结构如下:

输入合法的R绘图语句,再次单击Plot,结果如下:

 

转载地址:http://veqna.baihongyu.com/

你可能感兴趣的文章
http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html
查看>>
WPF样式动画Trigger.EnterActions和Trigger.ExitActions(ExitActions其实可以不做任何事情)
查看>>
Linux IPC System V 消息队列
查看>>
史上最全的 UIWebview 的 JS 与 OC 交互
查看>>
RedHat下安装MySQL
查看>>
SQL Server 2016 需要单独安装 SSMS
查看>>
[译]AngularJS $apply, $digest, 和$evalAsync的比较
查看>>
小尝试一下 cocos2d
查看>>
Android 基于Android的手机邮件收发(JavaMail)之四(邮件的发送)
查看>>
BUPT2017 wintertraining(15) #3 题解
查看>>
js-ES6学习笔记-Set和Map数据结构
查看>>
Xamarin.Forms的滚动视图ScrollView
查看>>
【面试题整理】数据库的优化方案有哪些
查看>>
hdu-5015-233 Matrix-矩阵
查看>>
Android中asset文件夹和raw文件夹区别与用法
查看>>
poj3264
查看>>
Eclipse中git插件导入远程库和上传项目源代码到远程库
查看>>
linux内核剖析-IBM
查看>>
关于Snmp的Trap代码开发之坑
查看>>
TCP 函数
查看>>