一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

C#实现Windows Form调用R进行绘图与显示的方法

时间:2017-05-06 编辑:简简单单 来源:一聚教程网

一、前提准备

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

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

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

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

三、Main窗体代码

 

 代码如下复制代码

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Windows.Forms;

 

namespaceGraphGenerateByR

{

 usingRDotNet;

 publicpartialclassMain : Form

 {

  publicMain()

  {

   InitializeComponent();

  }

  REngine engine =null;

 

  stringRcode ="";

  privatevoidbtnPlot_Click(objectsender, 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=Ɖd绘图',pch=20)

       ";

    }

    else

    {

     Rcode =this.txtRcode.Text;

    }

 

    //R.3.2.4

    engine = REngine.GetInstance();

    engine.Initialize();

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

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

    stringfilename ="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()");

    stringpath = System.IO.Path.GetFullPath(filename);

 

    Bitmap image =newBitmap(path);

    ptbGraphic.Image = image;

   }

   catch(Exception ex)

   {

    MessageBox.Show(ex.Message);

   }

   

  }

 

  privatevoidMain_FormClosing(objectsender, FormClosingEventArgs e)

  {

   if(engine!=null)

   {

    //clean up

    engine.Dispose();

   }

  }

 }

}

 

四、运行:

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

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

热门栏目