Как встроить R-график в Winform в C #? - PullRequest
0 голосов
/ 30 января 2019

Я использую R.NET для выполнения вычислений в своем приложении C #, и теперь я хотел бы отобразить результаты в Winform.

Любой желающий мог бы посоветовать, как встроить график R в winform, используяR.NET?

Я обнаружил нижеприведенный пост, который кажется устаревшим, поскольку я не могу найти ни ссылки, ни пакет Nuget для пространства имен RNETGraph, которое они используют.Ссылка, указанная в сообщении, также была заархивирована.

отображать несколько R Embedded Graph на нескольких панелях winform c #

И я хотел бы избежать уродливого решения сохранить изображение и затем загрузить его в PictureBox, как янеобходимо динамически изменять сюжет в соответствии с пользовательским вводом.

Спасибо

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Вы можете использовать Dieter Menne's RGraphHooks , чтобы отобразить вывод графика R в графическом элементе WinForms (например, Windows.Forms.Panel).RGraphHooks зависит от библиотеки Win32 хуков Дино Эспозито .

Использование RGraphHooks довольно просто.См. это сообщение в блоге Питера Дай Динха (Peter Dai Dinh) для небольшой демонстрационной программы.

Что вы в основном делаете, вы присоединяете RGrapHook к определенному элементу управления в графическом интерфейсе WinForms, а затем оборачиваете свой engine.Evaluate("plot(...)") в этом крючке:

RGraphAppHook cbt = new RGraphAppHook { GraphControl = panelForPlot };

cbt.Install();
engine.Evaluate("plot(rnorm(100))");
cbt.Uninstall();
0 голосов
/ 30 января 2019

Я так и не получил R.NET - документация просто не очень понятна.

Однако есть и другой вариант.Вы можете использовать командную строку для передачи аргументов из вашего приложения C # в ваш R.Script.

Например:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string strCmdText;
            strCmdText = "Rscript.exe [directory here]\\script.R 10 arg2"; //what comes after script.R are the arguments you are passing. 
            System.Diagnostics.Process.Start("CMD.exe", strCmdText);
        }
    }
}

Затем очень легко получить аргументы в R-скрипте.Просто используйте:

args <- commandArgs(trailingOnly = TRUE)

var1 <- args[1]  #Argument 1
var2 <- args[2]  #Argument 2

Приложение: Пожалуйста, обратите внимание, что вы должны иметь ваш RScript.exe в переменных среды для того, чтобы вышеперечисленное работало.

...