使用pdf更平滑的渐变条图例

时间:2013-12-17 01:50:08

标签: r ggplot2

使用PDF Graphics Devicepng)时,与png版本相比,ggplot2图例存在差异。 png中的渐变更平滑,而pdf中可见不同的渐变条纹。我查看了pdf的文档并调整了点大小,但这似乎并没有使渐变更平滑。如何使pdf渐变像png一样平滑?

PDF

enter image description here

PNG

enter image description here

png(file="grad1.png")
ggplot(mtcars, aes(x=cyl, y=mpg, fill=hp)) +
    geom_point() +
    scale_fill_gradient(low="grey88", high="black")
dev.off()

#Versus

pdf(file="grad1.pdf")
ggplot(mtcars, aes(x=cyl, y=mpg, fill=hp)) +
    geom_point() +
    scale_fill_gradient(low="grey88", high="black")
dev.off()

3 个答案:

答案 0 :(得分:3)

您可以在nbin中增加guide_colourbar()

ggplot(mtcars, aes(x=cyl, y=mpg, fill=hp)) +
    geom_point() +
    scale_fill_gradient(low="grey88", high="black")

last_plot() + guides(fill = guide_colourbar(nbin=4, raster=FALSE))

last_plot() + guides(fill = guide_colourbar(nbin=300, raster=FALSE))

答案 1 :(得分:0)

使用Cairo库时是否会发生这种情况?

library('Cairo')
CairoPDF('output.pdf')
    #plot
dev.off()

答案 2 :(得分:0)

在查看?scale_fill_gradient时,它会看到“seq_gradient_pal有关底层调色板的详细信息”。在查看seq_gradient_pal包中scales的来源时,有趣的是看到该函数使用多个离散颜色生成渐变。 seq_gradient_pal函数(source)中使用了scale_fill_gradient。我无法弄清楚这是否意味着总是使用seq_gradient_pal估计渐变,或者稍后在矢量图像中进行渐变填充。如果确实从几种不连续的颜色估计了渐变,那么这可能是您遇到问题的原因。

另请参阅Paul Murrell关于此article中渐变的评论。摘录:“一个例子是渐变填充,R图形引擎没有明确支持”。但是,gridSVG包现在支持渐变填充。

跟进@ baptiste的评论。请注意,guide_colourbar有一个raster选项,默认设置为TRUE。查看?guide_colourbar,您可以看到“If TRUE then the colorbar is rendered as a raster object. If FALSE then the colorbar is rendered as a set of rectangles. Note that not all graphics devices are capable of rendering raster image.