所以我有这个问题,当我导出某种类型的绘图的pdf时,绘图是用边界绘制的。例如,如果我像这样创建一个图:
library(reshape)
library(ggplot2)
library(ggnewscale)
# Create matrix
set.seed(1701)
a <- sample(1:10,100, replace=TRUE)
s <- matrix(a, nrow = 5, ncol=5)
s[upper.tri(s)] = t(s)[upper.tri(s)]
rownames(s) <- colnames(s) <- paste0("x", 1:5)
diag(s) <- 0
sDf <- melt(s)
# create diagonal values
diagDf <- data.frame(
var1 = c(paste0("x", 1:5)),
var2 = c(paste0("x", 1:5)),
val = c(2,5,3,1,5)
)
colPal <- rev(colorspace::sequential_hcl(palette = "Blues 3", n = 100))
colPal2 <- rev(colorspace::sequential_hcl(palette = "Reds 3", n = 100))
# make plot
ggplot(sDf, aes(X1,X2)) +
geom_tile(aes(fill = value)) +
scale_fill_gradientn(colors = colPal) +
new_scale_fill() +
geom_tile(data = diagDf, aes(var1, var2, fill = val), color = "black",
size = 0) +
scale_fill_gradientn(colors = colPal2) +
theme(aspect.ratio = 1) 这将在我的绘图窗口中生成如下所示的绘图:

但是,如果我导出图像的pdf,它会在对角线周围绘制一个黑色边框,如下所示:

现在,我意识到这一定与台词有关:
geom_tile(data = diagDf, aes(var1, var2, fill = val), color = "black",
size = 0)具体地说,color = "black", size = 0。我希望在代码中保留这一行,以允许用户通过控制边界的size的函数参数来打开和关闭边界。因此,例如,在一个更大的函数中,我会有如下内容
if(border){
lineSize <- 0.2
}else{
lineSize <- 0
}并设置size = lineSize。这个想法是,当lineSize = 0然后size将等于零,然后将以零大小绘制线条(这实际上应该与根本不绘制线条相同)。
这在RStudio的绘图窗口中有效...但是当我用size = 0导出pdf时,黑色边框被绘制在pdf上。如果我导出PNG,就不会发生这种情况。
你知道这是怎么回事吗?我正在使用MacBook专业版(如果这很重要?!)
发布于 2021-10-01 14:25:35
首先创建不带边框的绘图:
p <- ggplot(sDf, aes(Var1,Var2)) +
geom_tile(aes(fill = value)) +
scale_fill_gradientn(colors = colPal) +
new_scale_fill() +
geom_tile(data = diagDf, aes(var1, var2, fill = val)) +
scale_fill_gradientn(colors = colPal2) +
theme(aspect.ratio = 1)

然后,如果用户要求,您可以修改边框颜色/大小:
if (border) {
p$layers[[2]]$aes_params$colour = 'black'
p$layers[[2]]$aes_params$size = 0.2
}

发布于 2021-10-01 14:26:31
你有没有试过玩你的ggplot末尾的页边距?
theme(plot.margin = unit(c(2,2,2,2), "cm"))每个页边距的规则如下:单位(上、右、下、左)
示例:
pdf(file = "example2.pdf")
ggplot(mpg, aes(displ, hwy, colour = class)) +
geom_point() +
theme(plot.margin = unit(c(2,2,2,2), "cm"))
dev.off()https://stackoverflow.com/questions/69406994
复制相似问题