如何在`theme_bw`透明模式中摆脱情节周围的明亮边界?

时间:2018-05-29 19:02:15

标签: r ggplot2 printing

当在透明到较暗的背景上打印时,有没有办法摆脱theme_bw()中的这些白线?在theme_minimal()它们没有出现,但我想要theme_bw()。我尝试了几个theme()选项进行修改,但没有成功。

示例:

data(iris)
names(iris) <- tolower(names(iris))

library(ggplot2)
plot1 <- ggplot(iris, aes(x=sepal.length, y=sepal.width)) +
  geom_smooth() +
  theme_bw() + 
  theme(rect=element_rect(fill="transparent"),
        panel.grid = element_blank(),
        panel.background= element_blank())
pdf("plot1.pdf", width=4, height=4)
plot1
dev.off()

plot2 <- ggplot(iris, aes(x=sepal.length, y=sepal.width)) +
  geom_smooth() +
  theme_minimal() + 
  theme(rect=element_rect(fill="transparent"),
        panel.grid = element_blank(),
        panel.background= element_blank())
pdf("plot2.pdf", width=4, height=4)
plot2
dev.off()

enter image description here

注意:我在InDesign CS4中这样做。

3 个答案:

答案 0 :(得分:3)

您正在寻找plot.background主题元素,而不是panel.background主题元素。该图是整个区域,包括轴外,而面板是轴内或轴之间的区域。

丑陋的阴谋来说明差异:

ggplot(iris, aes(x=sepal.length, y=sepal.width)) +
  geom_smooth() +
  theme_bw() + 
  theme(rect=element_rect(fill="transparent"),
        panel.grid = element_blank(),
        panel.background= element_rect(color = "red", fill = "yellow", size = 6))

ggplot(iris, aes(x=sepal.length, y=sepal.width)) +
  geom_smooth() +
  theme_bw() + 
  theme(rect=element_rect(fill="transparent"),
        panel.grid = element_blank(),
        plot.background = element_rect(color = "red", fill = "yellow", size = 6))

theme_bw默认为带有白色边框的情节背景。

theme_bw()$plot.background
List of 5
 $ fill         : NULL
 $ colour       : chr "white"
 $ size         : NULL
 $ linetype     : NULL
 $ inherit.blank: logi TRUE
 - attr(*, "class")= chr [1:2] "element_rect" "element"

因此,您可以将plot.background设置为element_blank,或element_rect颜色为NA或透明,或任何其他方式使其不可见。由于您不需要绘图背景的任何属性,因此最简单的只是plot.background = element_blank()

ggplot(iris, aes(x=sepal.length, y=sepal.width)) +
  geom_smooth() +
  theme_bw() + 
  theme(rect=element_rect(fill="transparent"),
        panel.grid = element_blank(),
        plot.background = element_blank())

答案 1 :(得分:0)

Panel Border应该可以解决问题

plot1 <- ggplot(iris, aes(x=sepal.length, y=sepal.width)) +
  geom_smooth() +
  theme_bw() + 
  theme(rect=element_rect(fill="transparent"),panel.border = element_blank(),
        panel.grid = element_blank(),
        panel.background= element_blank())

答案 2 :(得分:0)

为什么不使用theme_minimal并调整主题?

col = "#383838"
plot2 <- ggplot(iris, aes(x=sepal.length, y=sepal.width)) +
  geom_smooth() +
  theme_minimal() + 
  theme(rect=element_rect(fill="transparent"),
        panel.grid = element_blank(),
        axis.ticks = element_line(colour = col),
        axis.line = element_line(colour = col, color = col, size = 0.1),
        panel.border = element_rect(colour = col),
        panel.background= element_blank())
pdf("plot2.pdf", width=4, height=4)
plot2
dev.off()

或者您出于某种原因必须使用theme_bw吗?