在使用ggplot的 ggsave导出饼图时出现的视觉伪影
我的搭档在用ggsave把 R的圆饼图保存下来时,遇到了一个我觉得很怪的问题——基本上,在圆饼图各扇区相交的中心处会多出一些微小的标记,好像扇形的圆心没有正确对齐。

数据是机密的,但基本结构如下(注,同样的问题也出现在不同的数据上)。
library(tidyverse)
df <- tibble(impact = factor(c("low", "modifier", "moderate", "high")),
count = c(1, 98, 23, 2))
以及它的生成方式如下
pie <- df |>
ggplot(mapping = aes(x ="", y = count, fill = impact)) +
geom_col(width = 1, color = 1) +
coord_polar("y", start=0) +
theme(axis.line=element_blank(),
axis.text.x=element_blank(),
axis.text.y=element_blank(),
axis.ticks=element_blank(),
axis.title.x=element_blank(),
axis.title.y=element_blank(),
panel.background=element_blank(),
panel.border=element_blank(),
panel.grid.major=element_blank(),
panel.grid.minor=element_blank(),
plot.background=element_blank()
)
ggsave(filename = str_c("pie", ".png"),
plot = pie,
path = "outputs",
width = 8.5,
height = NA,
units = c("in", "cm", "mm", "px"),
dpi = 300, )
之所以怪异,原因有两点。首先,在RStudio中查看这张图时,并不存在这种伪影(不过,作为截图,像素看起来会更粗糙)

更奇怪的是,当我在自己的机器上用完全相同的代码在RStudio中运行时,也没有这种伪影……

我们俩都在用较旧的MacBook,因此都在运行R 4.2.3、RStudio 2022.07.02、Tidyverse 2.0.0。
有什么想法吗?
解决方案
以下的方法在Windows 11上的R 版本4.5.3(2026-03-11 ucrt)环境中奏效。
png(filename = str_c("pie", ".png"),
width = 8.5,
height = 7.64,
units = "in",
res = 300L
)
pie
dev.off()
从文档中的说明,help("ggsave"),这是我强调的要点。
device
要使用的设备。可以是一个设备函数(例如png),也可以是以下之一:"eps"、"ps"、"tex"(pictex)、"pdf"、"jpeg"、"tiff"、"png"、"bmp"、"svg" 或 "wmf"(仅Windows)。若NULL(默认),设备会基于文件扩展名来猜测。
不要让 ggsave 根据文件扩展名来猜测设备,请显式使用设备 png(),问题就会消失。
ggsave(filename = str_c("pie", ".png"),
plot = pie,
path = "outputs",
width = 8.5,
height = NA,
units = "in",
dpi = 300,
device = png
)
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。