问题摘要:托管在Shinyapps.io上时,ggplot2图形的质量似乎较差。图形元素包含可见缺陷,例如geom_point()
的点不是圆的,有些像三角形,有些像矩形等。图例看起来好像是从低分辨率jpg中炸掉的。我的例子是here。
问题:有什么选项可以控制图形质量,例如dpi?
详细说明:开发一个简单的Shiny应用程序时,我注意到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)
})
}
)
我很好奇这是否可以改善。 “闪亮”是传达科学结果的强大工具,但是这些视觉伪像却以某种方式削弱了令人赞叹的效果。谢谢!
编辑:表达问题的更正确方法可能是说默认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已经在评论中回答了这个问题。