Графическое качество ggplot2 в блестящем состоянии на shinyapps.io

Резюме проблемы. Графы ggplot2 выглядят плохого качества в блестящем состоянии, когда размещены на shinyapps.io. Элементы графа содержат видимые дефекты, например. точки geom_point() не круглые, некоторые кажутся треугольниками, другими похожими на прямоугольники и т.д. Легенда выглядит так, как будто она была взорвана из-за низкого разрешения jpg. Мой пример здесь.

Вопрос: есть ли какие-либо опции для управления качеством графа, например, с разрешением на дюйм?

Подробное описание. Разрабатывая простое блестящее приложение, я заметил, что графики ggplot немного грубы по краям и не смогли улучшить ситуацию. Пример приложения демонстрирует это достаточно хорошо, обратите внимание на то, как точки кажутся неправильной формы. Их форма улучшается, приближаясь к округлости, когда я увеличиваю масштаб (в Chrome) до 200% или более. При 100% масштабировании весь график выглядит странным и негладным. Как будто когда разрешение изображения уменьшается на 0,77 или что-то в этом роде, вы получаете незначительные артефакты искажений; аналогичный эффект здесь. Самый простой способ увидеть это - загрузить изображение со 100% увеличением (щелкните правой кнопкой мыши, сохраните как), а затем увеличьте масштабную копию локальной копии. Вы увидите, как точки далеко не круглые. Код для server.R и ui.R очень прост:

# ui.R

shinyUI(fluidPage(
    titlePanel("My Shiny App"),
    sidebarLayout(
        sidebarPanel(
            h4("The graph looks rough")),
        mainPanel(
            plotOutput("myplot",width=800,height=600)
        )
    )
))

и

# server.R

library(ggplot2)
data(mtcars)

shinyServer(
    function(input, output) {
        output$myplot <- renderPlot({
            p <- ggplot(data=mtcars,aes(x=mpg,y=disp,color=factor(cyl)))
            p <- p + geom_point()
            print(p)
        })
    }
)

Мне интересно, можно ли это улучшить. Блестящий является мощным инструментом для передачи научных результатов, но вау-эффект каким-то образом подрывается этими визуальными артефактами. Благодарю!

EDIT: возможно, более правильным способом выразить эту проблему является то, что в изображении PNG по умолчанию отсутствует сглаживание.

EDIT 2: для того, чтобы этот вопрос был более ценным для других пользователей SO, вот скриншоты графика до и после использования устройства Cairo (используйте масштабирование в своем браузере, чтобы лучше понять разницу):

Without Cairo graphWith Cairo graph

Ответы

Ответ 1

Поскольку вы, вероятно, работаете на Linux-сервере, вам, скорее всего, понадобится использовать графическую библиотеку Cairo.

Cairo - это 2D-графическая библиотека с поддержкой нескольких устройств вывода. В число поддерживаемых конечных целей входят X Window System (через Xlib и XCB), Quartz, Win32, буферы изображений, PostScript, PDF и SVG файлы. Экспериментальные бэкенды включают OpenGL, BeOS, OS/2 и DirectFB. Cairo предназначен для обеспечения согласованного вывода на всех выходных носителях, используя при этом преимущества аппаратного ускорения дисплея, когда они доступны (например, через расширение X Render). Лично я использую его для альфа-канала (варианты прозрачности).

Удобно, существует реализация R, которая создает графическое устройство cairo в пакете "Cairo". По сути, вы должны добавить следующий фрагмент в 'server.R':

#install.packages("Cairo")
library(Cairo)
options(shiny.usecairo=T)

Это должно сделать это.

PS: Я вижу, что @MathewPlourde уже ответил на этот вопрос в комментариях.