在 R 中将填充等高线图保存为 PDF 会给出像素化结果
Saving filled contour plots to PDF in R gives pixelated results
正在将 R
的 filled.contour
函数的一个内置示例的输出保存为 PDF:
pdf('test.pdf')
require("grDevices")
filled.contour(volcano, asp = 1)
dev.off()
产生离散化结果(见下文)。有没有什么办法解决这一问题?系统信息:
> sessionInfo()
R version 3.6.3 (2020-02-29)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 20.04.1 LTS
在接受的答案后编辑:
这个问题实际上在pdf
函数的文档中被报告:
If you see problems with PDF output, do remember that the
problem is much more likely to be in your viewer than in R ...
Symptoms for which the viewer has been at fault are apparent
grids on image plots ...
Unfortunately the default viewers on most Linux and macOS
systems have these problems, and no obvious way to turn off
graphics anti-aliasing.
记录问题的地方很奇怪,因为细分为矩形段显然是由 filled.contour
而不是 pdf
引起的。否则 ggplot2
的输出也会遇到同样的问题。
这可能是抗锯齿的结果:当您显示图像时,它会一次绘制一个正方形。在绘制它们时,边缘是方形颜色和白色背景的混合,因此绘制得较浅。
不幸的是,这并不是您真正可以控制的事情。引入工件的是 PDF 预览器。请参阅此页面 https://codedocean.wordpress.com/2014/02/03/anti-aliasing-and-image-plots/ 进行讨论。
那里的建议对我有用:将 png()
设备与 type = "cairo"
一起使用。这给出了位图输出而不是 pdf()
.
的矢量输出
png('test.png',type="cairo")
filled.contour(volcano, asp = 1)
dev.off()
编辑添加:
我不认为 filled.contour
可以做得更好,但如果您愿意切换到 ggplot2
图形,则可以。当它绘制填充轮廓时,它似乎使用多边形来绘制,而不是 filled.contour
使用的 image
样式图。这仍然在预览器中显示相同的抗锯齿错误,但现在线条出现在颜色之间的边界上,这不那么令人讨厌了。例如:
df <- data.frame(x = as.numeric(row(volcano)-1)/(nrow(volcano)-1),
y = as.numeric(col(volcano)-1)/(ncol(volcano)-1),
z = as.numeric(volcano))
pdf('test.pdf')
library(ggplot2)
ggplot(df, aes(x=x, y=y, z=z)) +
geom_contour_filled()
dev.off()
我不知道如何获得与 filled.contour
使用相同的调色板,即 function(n) hcl.colors(n, "YlOrRd", rev = TRUE)
。也许其他人可以在评论中向我们展示。
正在将 R
的 filled.contour
函数的一个内置示例的输出保存为 PDF:
pdf('test.pdf')
require("grDevices")
filled.contour(volcano, asp = 1)
dev.off()
产生离散化结果(见下文)。有没有什么办法解决这一问题?系统信息:
> sessionInfo()
R version 3.6.3 (2020-02-29)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 20.04.1 LTS
在接受的答案后编辑:
这个问题实际上在pdf
函数的文档中被报告:
If you see problems with PDF output, do remember that the
problem is much more likely to be in your viewer than in R ...
Symptoms for which the viewer has been at fault are apparent
grids on image plots ...
Unfortunately the default viewers on most Linux and macOS
systems have these problems, and no obvious way to turn off
graphics anti-aliasing.
记录问题的地方很奇怪,因为细分为矩形段显然是由 filled.contour
而不是 pdf
引起的。否则 ggplot2
的输出也会遇到同样的问题。
这可能是抗锯齿的结果:当您显示图像时,它会一次绘制一个正方形。在绘制它们时,边缘是方形颜色和白色背景的混合,因此绘制得较浅。
不幸的是,这并不是您真正可以控制的事情。引入工件的是 PDF 预览器。请参阅此页面 https://codedocean.wordpress.com/2014/02/03/anti-aliasing-and-image-plots/ 进行讨论。
那里的建议对我有用:将 png()
设备与 type = "cairo"
一起使用。这给出了位图输出而不是 pdf()
.
png('test.png',type="cairo")
filled.contour(volcano, asp = 1)
dev.off()
编辑添加:
我不认为 filled.contour
可以做得更好,但如果您愿意切换到 ggplot2
图形,则可以。当它绘制填充轮廓时,它似乎使用多边形来绘制,而不是 filled.contour
使用的 image
样式图。这仍然在预览器中显示相同的抗锯齿错误,但现在线条出现在颜色之间的边界上,这不那么令人讨厌了。例如:
df <- data.frame(x = as.numeric(row(volcano)-1)/(nrow(volcano)-1),
y = as.numeric(col(volcano)-1)/(ncol(volcano)-1),
z = as.numeric(volcano))
pdf('test.pdf')
library(ggplot2)
ggplot(df, aes(x=x, y=y, z=z)) +
geom_contour_filled()
dev.off()
我不知道如何获得与 filled.contour
使用相同的调色板,即 function(n) hcl.colors(n, "YlOrRd", rev = TRUE)
。也许其他人可以在评论中向我们展示。