众所周知R软件功能非常强大,可以很好的进行各类统计,并能输出图形。下面介绍一种R语言和C#进行通信的方法,并将R绘图结果显示到WinForm UI界面上的方法,文中介绍的很详细,需要的朋友可以参考下。

一、前提准备

安装R软件,需要安装32位的R软件,64位的调用会报错。另外就是讲R添加到电脑环境变量中。

打开R软件,安装包 scatterplot3d,演示需要用到此R包。

二、创建项目GraphGenerateByR,项目结构如下:

注意:这里需要引入RDotNet类库,可以自行下载:http://rdotnet.codeplex.com/

三、Main窗体代码

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace GraphGenerateByR

{

 using RDotNet;

 public partial class Main : Form

 {

  public Main()

  {

   InitializeComponent();

  }

  REngine engine = null;

  string Rcode = "";

  private void btnPlot_Click(object sender, EventArgs e)

  {

   try

   {

    if(this.txtRcode.Text=="")

    {

     Rcode = @"library('scatterplot3d')

       z <- seq(-10, 10, 0.01) 

       x <- cos(z)

       y <- sin(z) 

       scatterplot3d(x, y, z, highlight.3d=TRUE, col.axis='blue', col.grid='lightblue',main='3d绘图',pch=20)

       ";

    }

    else

    {

     Rcode = this.txtRcode.Text;

    }

    //R.3.2.4

    engine = REngine.GetInstance();

    engine.Initialize();

    //图片加入GUID,防止重名(还有一种就是先删除后保存)

    string rnd = System.Guid.NewGuid().ToString().Replace("-", "");

    string filename ="i"+ rnd+ "Rimage.png";

    engine.Evaluate(string.Format("png(file='{0}',bg ='transparent',width={1},height={2})", filename, this.ptbGraphic.Width, this.ptbGraphic.Height));

    //engine.Evaluate(@"x <- (0:12) * pi / 12

    //    y <- cos(x)

    //    plot(x,y);

    //    ");

    engine.Evaluate(Rcode);

    engine.Evaluate("dev.off()");

    string path = System.IO.Path.GetFullPath(filename);

    Bitmap image = new Bitmap(path);

    ptbGraphic.Image = image;

   }

   catch(Exception ex)

   {

    MessageBox.Show(ex.Message);

   }

  }

  private void Main_FormClosing(object sender, FormClosingEventArgs e)

  {

   if(engine!=null)

   {

    //clean up

    engine.Dispose();

   }

  }

 }

} 

四、运行:

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

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

总结

R语言对中文支持不算友好,所以很容易出现中文乱码;

以上就是详细介绍使用C#实现Windows Form调用R进行绘图与显示的方法(图)的详细内容,更多请关注php中文网其它相关文章!

C#建WindowForm调用R可视化的更多相关文章

  1. JAVA调用R

    JAVA很适合开发应用系统,但是数学建模和计算能力非其所长,如果该系统需要进行大量的统计或者优化的计算,调用R是一种很好的方式.JAVA负责系统的构建,R用来做运算引擎,从而实现应用型和分析性相结合的 ...

  2. .Net调用R语言

    ///加载自己写的R语言算法库 public List<double> GetZTFB(double[] data) { List<double> par = new List ...

  3. Rsession让Java调用R更简单

    Rsession让Java调用R更简单 R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒. ...

  4. VS中使用QT调用R脚本

    一开始想直接把R编译成库然后调用R,后来查了n多资料,发现VS中是无法办到的,官方也给出了一句话,大概意思就是没可能在VS中使用R提供的C++接口,大概是涉及到了底层的ABI的原因,具体也不太清楚. ...

  5. Java调用R(一)_Rserve

    最近做项目涉及到R总结一些Java本地调用R和Java web项目中调用R的基本步骤 1.  R中安装Rserve包 2.  系统变量Path加上 C:\Program Files\R\R-3.0.1 ...

  6. Java调用R(三)_系统命令调用

    java通过配置的系统命令Rscript直接调用R脚本. 优点:R脚本和Java代码完全分离 缺点:R中变量不能控制 1. Java本地能够成功调用. public void CallR() { Ru ...

  7. Java调用R——rJava的安装和配置

    rJava是Java通过JRI调用R所要安装的包.配置起来比较麻烦,我参考网上进行配置,使用rJava包中example里面的示例测试,控制台显示: Cannot find JRI native li ...

  8. python 调用 R,使用rpy2

    python 与 R 是当今数据分析的两大主流语言.作为一个统计系的学生,我最早接触的是R,后来才接触的python.python是通用编程语言,科学计算.数据分析是其重要的组成部分,但并非全部:而R ...

  9. JAVA 调用 R 语言之升华篇

    由于项目的需要,最近做了一个javaWeb调用R的组件,在这里,我把自己走的一些弯路给大家总结一下: 一.选取什么插件作为java和R之间的通信? 1. 在传统的方式中,大致可以分为两类:一类是JRI ...

随机推荐

  1. java---正则表达式的字符串简单实用及扩展链接

    一:什么是正则表达式 1.定义:正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的 ...

  2. web 开发之nginx--- 阿里云部署nginx

    http://blog.csdn.net/zhangjingyangguang/article/details/7441268 http://www.cnblogs.com/languoliang/a ...

  3. macosx下apache的默认用户为daemon

    环境macosx, xampp. 其中apache的默认账户为daemon,若想对htdocs下的文件做写操作,必须改动该文件夹的用户权限: chown daemon:daemon MYDIR chm ...

  4. linux基础教程---内容操作

    一.寻找文件里的指定内容 寻找文件里的指定内容,输出内容所在行的所有信息 grep    被搜索内容    文件路径名 >grep     var       passwd       //在 ...

  5. 第十篇:Linux中权限的再讨论( 上 )

    前言 在Linux系统中,用户分为 个权限位.好了,很多朋友对于Linux权限的了解就仅限于此了.但,Linux目录权限和文件权限一样吗?内核对于权限的检查过程又是怎样的? 如果你不清楚,本文将为你解 ...

  6. 时序数据库技术体系 – InfluxDB TSM存储引擎之TSMFile

    本文转自 http://hbasefly.com/2018/01/13/timeseries-database-4/ 为了更加系统的对时序数据库技术进行全方位解读,笔者打算再写一个系列专题(嘿嘿,好像 ...

  7. delay()延迟

    jquery的delay()方法: delay() 方法对队列中的下一项的执行设置延迟. 封装方法: $.fn.fadeInWithDelay = function(){ var delay = 0; ...

  8. Javascript通过bind()掌控this

    Javascript通过bind()掌控this: http://blog.csdn.net/rznice/article/details/26134201 bind能为我们做些什么,同时它的好处在哪 ...

  9. codevs 5964 [SDOI2017]序列计数

     [题解] 官方题解就两句话. 写了三个版本的不同分值代码.看代码吧. 前导1 //f[i][j][1/0]表示长为i,sum mod p=j,是否已经选了质数的方案数 #include<cst ...

  10. [Wc2007]剪刀石头布[补集转化+拆边]

    2597: [Wc2007]剪刀石头布 Time Limit: 20 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 1157  Solved:  ...