С# и R.Net не отображают график с ggplot2

У меня есть следующий код для построения серии входных данных с использованием диаграмм R из моего приложения С#:

public void plotGraphR_2D(List<double> x, double[,] y)
{
    string Rpath = @"C:\Program Files\R\R-3.1.0\bin\x64";

    REngine.SetEnvironmentVariables(Rpath);
    REngine engine = REngine.GetInstance();

    var v1 = engine.CreateNumericVector(x);
    var v2 = engine.CreateNumericMatrix(y);

    if (engine.IsRunning == false)
    {
        engine.Initialize();
    }

    engine.SetSymbol("v1", v1);
    engine.SetSymbol("v2", v2);

    engine.Evaluate("require('ggplot2')");
    engine.Evaluate("library('ggplot2')");
    engine.Evaluate("my_data <- data.frame(v2)");
    engine.Evaluate("colnames(my_data) <- c('Price', 'Quantity')");
    engine.Evaluate("myChart <- ggplot() + geom_line(data = my_data, my_data$Price)"); // THIS DOESN'T WORK
    engine.Evaluate("myChart");
    //engine.Evaluate("plot(my_data$Price)"); // THIS WORKS
}

Мой ввод x — это список, а y — двумерный массив. Сначала я преобразовываю x в числовой вектор и y во фрейм данных, а затем меняю имена столбцов на фрейм данных. Я хочу построить один из столбцов моего фрейма данных (my_data$Price), но при использовании ggplot2 это не работает. Я не получаю никаких ошибок, но я не вижу всплывающих диаграмм. Если я попытаюсь использовать последнюю строку engine.Evaluate("plot(my_data$Price)") (то есть обычный график), все будет работать нормально. Есть ли проблема с тем, как я вызываю ggplot2? Я установил библиотеку с помощью RStudio. Что-нибудь еще я должен сделать, чтобы решить проблему?

Спасибо.


person opt    schedule 21.10.2014    source источник
comment
Попробуйте engine.Evaluate("print(myChart)");. Я не знаком с R.net, но это может заставить его построить сюжет ggplot   -  person ialm    schedule 21.10.2014
comment
Я подозреваю, что это может иметь значение: stackoverflow.com/questions/5106782/. Возможно, явное использование aes_string помогло бы. В качестве альтернативы вы всегда можете записать код в файл сценария и просто получить сценарий из R.NET...   -  person etov    schedule 22.10.2014
comment
@ialm Спасибо за ваше предложение. Добавление print() фактически решает мою проблему, и теперь я могу видеть диаграмму. Пожалуйста, добавьте это как ответ, так как это может быть проще для будущих консультаций по той же проблеме.   -  person opt    schedule 22.10.2014
comment
Не беспокойся. Это был выстрел в темноте, так как я не мог проверить это сам. Вы можете добавить свой собственный ответ, документируя, как вы решили свою проблему, и принять его как правильный для будущих посетителей с той же проблемой, или принять ответ jm, если он правильный (хотя у jm, похоже, другая проблема с его сюжетом).   -  person ialm    schedule 22.10.2014


Ответы (1)


Предоставленный код R не работает, как сообщается. Приведенный ниже код действительно успешно создает ggplot, однако оператор print создает окно графического устройства, но показывает неправильное отображение (пустую форму). Так что да, проблема есть, но я точно не знаю, почему. Единственный обходной путь, который я могу предложить, - это выводить изображения на диск.

        engine.Evaluate("myChart <- ggplot(my_data, aes(x=Price, y=Quantity)) + geom_line()");
        engine.Evaluate("print(myChart)");
person j-m    schedule 21.10.2014
comment
Добавление строки engine.Evaluate(print(myChart)) решает мою проблему, и теперь я могу правильно видеть диаграмму. Спасибо другим вам и ialm за помощь. - person opt; 22.10.2014
comment
Есть ли способ добиться этого в ASP.Net или каком-либо веб-приложении? - person Sandesh Daddi; 24.05.2016