问题摘要:托管在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)
        })
    }
)


我很好奇这是否可以改善。 “闪亮”是传达科学结果的强大工具,但是这些视觉伪像却以某种方式削弱了令人赞叹的效果。谢谢!

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

编辑2:为了使这个问题对其他SO用户更有价值,这是使用Cairo设备之前和之后图表的屏幕截图(使用浏览器中的zoom可以更好地了解两者之间的区别):

最佳答案

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

Cairo是2D图形库,支持多种输出设备。当前受支持的输出目标包括X Window系统(通过Xlib和XCB),Quartz,Win32,图像缓冲区,PostScript,PDF和SVG文件输出。实验性后端包括OpenGL,BeOS,OS / 2和DirectFB。开罗旨在在所有输出媒体上产生一致的输出,同时利用显示硬件加速(如果有)(例如通过X Render Extension)。我个人将其用于alpha通道(透明度选项)。

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

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


那应该做。

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

07-25 22:51