【问题标题】:ggplot2 graph quality in shiny on shinyapps.ioshinyapps.io 上闪亮的 ggplot2 图形质量
【发布时间】:2014-12-04 19:38:36
【问题描述】:

问题总结:当托管在 shinyapps.io 上时,ggplot2 图表的闪亮质量似乎很差。图表元素包含可见的缺陷,例如geom_point() 的点不是圆形的,有些看起来像三角形,有些像矩形等。图例看起来好像是从低分辨率 jpg 中放大的。我的例子是here

问题:是否有任何选项可以控制图形质量,例如 dpi?

详细说明:开发一个简单的 Shiny 应用程序,我注意到 ggplot 图的边缘有些粗糙,无法改善这种情况。 example app 很好地证明了这一点,注意这些点看起来是不规则的形状。当我将缩放(在 Chrome 中)增加到 200% 或更多时,它们的形状会得到改善,接近圆形。在 100% 缩放时,整个图形看起来很奇怪而且不平滑。好像当图像分辨率降低 0.77 倍或类似的因素时,您会得到轻微的失真伪影;类似的效果在这里。最简单的查看方法是下载图片以 100% 缩放(右键单击,另存为),然后在本地副本上增加缩放。你会看到点远非圆形。 server.Rui.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)
        })
    }
)

我很好奇这是否可以改进。 Shiny 是传达科学成果的强大工具,但令人惊叹的效果在某种程度上被这些视觉人工制品破坏了。谢谢!

编辑:表达问题的更正确方法可能是说默认 PNG 图像中没有抗锯齿。

编辑 2:为了让这个问题对其他 SO 用户更有价值,以下是使用 Cairo 设备之前和之后的图表截图(在浏览器中放大以更好地查看差异):

【问题讨论】:

  • 只是猜测,尝试在 server.R 或 global.R 中包含 library(Cairo);options(shiny.usecairo=TRUE)
  • @MatthewPlourde 实际上,它就像一个魅力。您当然可以重新格式化您的评论作为答案。
  • 你会考虑在屏幕截图前后添加吗?
  • @bdemarest 很好的建议,谢谢。

标签: r graph ggplot2 shiny


【解决方案1】:

由于您可能在基于 Linux 的服务器上,您可能需要使用 Cairo 图形库。

Cairo 是一个支持多种输出设备的 2D 图形库。当前支持的输出目标包括 X Window System(通过 Xlib 和 XCB)、Quartz、Win32、图像缓冲区、PostScript、PDF 和 SVG 文件输出。实验性后端包括 OpenGL、BeOS、OS/2 和 DirectFB。 Cairo 旨在在所有输出媒体上产生一致的输出,同时利用可用的显示硬件加速(例如,通过 X 渲染扩展)。就个人而言,我将它用于 Alpha 通道(透明度选项)。

方便的是,有一个 R 实现可以在“Cairo”包中创建一个 cairo 图形设备。实际上,您必须将以下块添加到“server.R”:

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

应该这样做。

PS:我看到@MathewPlourde 已经在 cmets 中回答了这个问题。

【讨论】:

  • 你碰巧测试过这个吗? options(shiny.usecairo=T) 是必需的吗?我认为这可能默认设置为TRUE
  • 取决于发行版。桌面版和服务器版的默认值不同,因此如果显式调用图形设备或设置,代码可能无法移植。在 CentOS/RHEL 中,Cairo 应该是默认设置,但 Shiny 仍然与其他一些发行版进行奇怪的交互,因此 (1) 确保已安装 Cairo R 库和 (2) 显式调用它可以解决用户尝试调试和 (例如)意外设置其他主要图形设备。
  • 实际上只是在RHEL站上尝试过,RSever设置Cairo失败,默认使用png。我猜它需要石英,并且一些默认将它指向 png,而不是绕过开罗。没有抗锯齿,这看起来是锯齿状的。 Cairo 的性能受到了影响(大约 +20%),所以如果你要绘制很多很多点,最好让服务器上的资源跟上。 shiny.rstudio.com/reference/shiny/latest/plotPNG.html
猜你喜欢
  • 2017-09-05
  • 1970-01-01
  • 1970-01-01
  • 2019-03-30
  • 2019-04-24
  • 2016-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多