C# 在多面板winform c中显示多个R嵌入式图形#

C# 在多面板winform c中显示多个R嵌入式图形#,c#,r,winforms,C#,R,Winforms,我想使用R.NET显示嵌入winform c#中的R中的多个图形。我有两张表格。表1由多个面板组成,表2由一些基于用户输入的参数组成。在我的场景中,用户输入参数后,图形将显示在表格1的面板中,而不是弹出窗口中。 我试过一些我从中得到的代码,或者它们很好地显示表单中嵌入的图形,但只显示在一个面板中,因此多个图形只能显示在一个面板中。我的问题是如何在多个面板中显示多个嵌入的图形。 这是我在form2的代码: namespace RNETGraph {public partial class

我想使用R.NET显示嵌入winform c#中的R中的多个图形。我有两张表格。表1由多个面板组成,表2由一些基于用户输入的参数组成。在我的场景中,用户输入参数后,图形将显示在表格1的面板中,而不是弹出窗口中。 我试过一些我从中得到的代码,或者它们很好地显示表单中嵌入的图形,但只显示在一个面板中,因此多个图形只能显示在一个面板中。我的问题是如何在多个面板中显示多个嵌入的图形。 这是我在form2的代码:

    namespace RNETGraph

{public partial class RGraphForm : Form
{
    private readonly RGraphAppHook cbt;
    REngine engine;

    public RGraphForm()
    {
        InitializeComponent();
        engine = REngine.GetInstance();

    }

    private void btnShowGraph_Click(object sender, EventArgs e)
    {
        Panel pan2 = data.getPanel2();
        RGraphAppHook cbt1 = new RGraphAppHook { GraphControl = pan2 };
        cbt1.Install();
        engine.Evaluate("plot(rnorm(100))");
        cbt1.Uninstall();

        Panel pan1 = data.getPanel1();
        RGraphAppHook cbt = new RGraphAppHook { GraphControl = pan1 };
        cbt.Install();
        engine.Evaluate("plot(rnorm(500))");
        cbt.Uninstall();
    }     
}}

使用
win.graph()
dev.new()
打开一个新的图形窗口:


使用
win.graph()
dev.new()
打开一个新的图形窗口:


我是你上面提到的hook解决方案的作者。该方法是可行的,但内存管理是一个问题,彻底关闭是脆弱的。所以,保持简单,不要使用两个钩子,双重问题。更好的方法是,在R中组装图形,例如使用facets或标准图形的split()。所以我应该只使用一个钩子,然后为标准图形添加一些方法,对吗?内存管理问题找到解决方案了吗?内存管理:我有一个应用程序经常启动,然后重新启动,但计算机总是开着。这仍然会导致任务管理器中Rscript的累积(不是每次启动时);过来看。因此,计算机必须每周重新启动一次,以摆脱挂起的脚本。有没有关于如何解决内存管理问题的指针?Application.Exit();在表单中,关闭似乎解决了这个问题。我是您上面提到的钩子解决方案的作者。该方法是可行的,但内存管理是一个问题,彻底关闭是脆弱的。所以,保持简单,不要使用两个钩子,双重问题。更好的方法是,在R中组装图形,例如使用facets或标准图形的split()。所以我应该只使用一个钩子,然后为标准图形添加一些方法,对吗?内存管理问题找到解决方案了吗?内存管理:我有一个应用程序经常启动,然后重新启动,但计算机总是开着。这仍然会导致任务管理器中Rscript的累积(不是每次启动时);过来看。因此,计算机必须每周重新启动一次,以摆脱挂起的脚本。有没有关于如何解决内存管理问题的指针?Application.Exit();在FormClosing中似乎可以解决问题。请尝试解释此答案的作用,而不仅仅是post codewin。graph()或dev.new()会打开一个r图形窗口。抱歉-更清楚地说-此解释应该在答案中,以便其他人可以轻松地看到和理解,例如上面的。您可以随时编辑自己的答案-如果这不太正确,请尝试解释此答案的作用,而不仅仅是post codewin。graph()或dev。new()将打开一个r图形窗口。抱歉-更清楚地说-此解释应包含在答案中,以便其他人可以轻松地看到和理解,例如上面的。您可以随时编辑自己的答案-如果这不太正确,请编辑
cbt.Install();
engine.Evaluate("win.graph()");    
engine.Evaluate("plot(rnorm(500))");
cbt.Uninstall();