2014-10-09 2 views
14

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

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

Подробное описание: Разработка простого Блестящая приложения, я заметил, что ggplot графики немного грубо вокруг краев, и не смог улучшить ситуацию. example app демонстрирует это достаточно хорошо, обратите внимание на то, как точки кажутся неправильной формы. Их форма улучшается, приближаясь к округлости, когда я увеличиваю масштаб (в 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 graph With Cairo graph

+7

Просто предположите, попробуйте включить 'library (Cairo); опции (shiny.usecairo = TRUE)' на вашем сервере.R или в global.R. –

+0

@MatthewPlourde На самом деле, он работал как шарм. Вы могли бы переформатировать свой комментарий в качестве ответа. –

+0

Не могли бы вы добавить до и после скриншотов? – bdemarest

ответ

5

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

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

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

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

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

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

+0

Испытывали ли вы это? Требуется ли 'options (shiny.usecairo = T)'? Я думаю, что по умолчанию может быть установлено значение «TRUE». –

+0

Зависит от дистрибутива. Значения по умолчанию различны для версий Desktop и Server, поэтому код может быть несовместимым, если графические устройства или настройки были вызваны явно. В CentOS/RHEL Cairo должен быть по умолчанию, но Shiny по-прежнему взаимодействует странно с некоторыми другими дистрибутивами, поэтому (1) убедитесь, что библиотека Cairo R установлена ​​и (2) вызов явным образом может решить проблемы, вызванные попытками отладки пользователей и (например), устанавливая другие первичные графические устройства случайно. –

+1

Просто попробовал на станции RHEL, и RSever не установил Cairo и вместо этого использует png. Я предполагаю, что он требует кварца, а некоторые по умолчанию указывают на png вместо этого, минуя Каир. Без сглаживания это выглядит неровным. Существует производительность с Каиром (около + 20%), поэтому, если вы планируете много и много очков, лучше иметь ресурсы на сервере, чтобы не отставать. http://shiny.rstudio.com/reference/shiny/latest/plotPNG.html –

Смежные вопросы