Использование ggplot2 с записной книжкой Julia pluto

#ggplot2 #julia

#ggplot2 #Джулия

Вопрос:

Я работаю с Плутоном.записная книжка jl. Я хотел бы использовать библиотеку ggplot2 R для создания некоторых графиков.

Следуя этому примеру, если я выполню следующий код в Julia REPL, я смогу получить вывод графика ggplot2.

 using RCall
@rlibrary ggplot2
using DataFrames
df = DataFrame(v = [3,4,5], w = [5,6,7], x = [1,2,3], y = [4,5,6], z = [1,1,2])
ggplot(df, aes(x=:x,y=:y))   geom_line()
  

Теперь, когда я использую тот же код в pluto.записная книжка jl (каждая строка представляет собой отдельную ячейку), затем я получаю следующее сообщение об ошибке:

введите описание изображения здесь

Есть ли способ заставить изображение ggplot2 отображаться внутри записной книжки pluto?

Аналогично, если я просто вхожу ggplot() в ячейку, я получаю ту же ошибку, но ggplot not defined .

Ответ №1:

С @library помощью Pluto.jl, похоже, не удается найти пакет R.

Однако Pluto может обрабатывать этот формат:

 @rimport ggplot2 as ggplot2
  

введите описание изображения здесь

Мне удалось увидеть картинку после нажатия кнопки «воспроизвести» 3 или 4 раза. На этом хорошие новости заканчиваются — интеграция Plut-RCall нестабильна. График отображается в отдельном окне, которое, кажется, зависает — возможно, это история для открытия проблемы.

Однако то, что вы можете попытаться сделать, это сохранить изображение в файл, а затем визуализировать его:

 begin
    ggplot2.ggplot(df, ggplot2.aes(x=:x, y=:y))    ggplot2.geom_line()
    ggplot2.ggsave("myplot.png")
    im1 = Images.load("myplot.png")
end
  

введите описание изображения здесь

Ответ №2:

В качестве обходного пути можно переопределить Base.show вручную (см. Pluto.jl/sample/test1.jl) с помощью

 function Base.show(io::IO, ::MIME"image/png", p::RObject{VecSxp})
    (path, _) = mktemp()
    R"ggsave($path, plot=$p, device = 'png')"
    im = read(path)
    rm(path)
    write(io, im)
end
  

После этого в ячейках, которые выводят что-либо подобного типа RObject{VecSxp} , будет отображаться изображение PNG:

Записная книжка Pluto

Комментарии:

1. Небольшое предупреждение: другие методы также RObject{VecSxp} , но не графики, например, списки. Поэтому перегрузка show нарушает отображение этих других объектов.