C#实现Windows Form调用R进行绘图与显示的方法
作者:JackWang-CUMT 发布时间:2021-11-29 05:40:13
标签:c#,r语言,绘图
一、前提准备
安装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,结果如下:
来源:http://www.cnblogs.com/isaboy/p/R_image_csharp_RDotNet.html


猜你喜欢
- 本文实例讲述了Android基于SoftReference缓存图片的方法。分享给大家供大家参考,具体如下:Java中的SoftReferen
- 本文实例讲述了Android编程使用pull方式解析xml格式文件的方法。分享给大家供大家参考,具体如下:上次已经说过使用Android s
- 目录1.跳转控制语句:区分continue和break; * continue:用于循环中,基于条件控制,跳过某次循环体内容的执行
- 在JAVA中通过synchronized语句可以实现多线程并发。使用同步代码块,JVM保证同一时间只有一个线程可以拥有某一对象的锁。锁机制实
- MyBatis-Plus不使用数据库默认值的问题有时候我们在设计数据表时希望某些字段使用默认值,比如create_time、和update_
- 引言在Android应用中,列表有着举足轻重的地位,几乎所有的应用都有列表的身影,但是对于列表的交互体验一直是一个大问题。在性能比较好的设备
- 我在以前的博客中介绍了如何使用XmlDocument类对XML进行操作,以及如何使用LINQ to XML对XML进行操作。它们分别使用了X
- 摘要:其实两种方法归结起来看还是一种,都是利用Thread的构造器进行创建,区别就是一种是无参的,一种是有参的。一、继承Thread线程类:
- 模板编程是idea的强大功能,也提高了开发人员的编程效率,比如输入main函数:public static void main(String
- 描述:由于产品需求,要求含有EditText的界面全屏显示,最好的解决方式是使用AndroidBug5497Workaround.assis
- 前言之前做的几个微信小程序项目,大部分客户都有要在微信小程序前端提现的需求。提现功能的实现,自然使用企业付款接口,不过这个功能开通比较麻烦,
- 本文实例讲述了C#中Socket通信用法。分享给大家供大家参考。具体如下:一、UDP方式:服务器端代码:static void Main(s
- 本文实例讲述了C#实现启动,关闭与查找进程的方法。分享给大家供大家参考,具体如下:运行效果截图如下:查找/列出进程很容易,但干掉进程得借助系
- 前言开发中很多需要javac 的程序依赖 JAVA_HOME环境变量.如果是手工下载源码安装的JDK,很容易知道JAVA_HOME的目录.
- 本文实例为大家分享了WPF实现轮播图切换效果的具体代码,供大家参考,具体内容如下实现效果如下:步骤:1、自定义控件MyImageContro
- 经过测试 将resultMap="java.lang.Integer"改成resultType="java.l
- //执行顺序:(优先级从高到低。)静态代码块>mian方法>构造代码块>构造方法。其中静态代码块只执行一次。构造代码块在每
- 业务场景通常微服务对于用户认证信息解析有两种方案在 gateway 就解析用户的 token 然后路由的时候把 userId 等相关信息添加
- springboot + docker + jenkins自动化部署项目,jenkins、mysql、redis都是docker运行的,并且
- 波浪球的效果一直都是想模仿的对象,在最近一段时间里模仿了这一界面,其实所用知识并不多。1)、波浪的效果是利用三角函数来实现的,在自定义vie