将面板边框添加到ggplot2

时间:2014-10-04 10:19:12

标签: r plot ggplot2

我被要求在下面的地块周围放置一个完整的边框:

enter image description here

使用panel.border = element_rect(colour = "black")会导致图中的丢失变为空白。

我无法使用theme_bw(),因为它没有与通常主题相同的功能,我目前使用的代码如下:

graph<-ggplot(d,aes(x=d$AOE, y=d$MEI)
            )+
  geom_point(shape=20, size=3)+
  geom_rug()+
  annotate("text", x = -1.1, y = 14000, label = "27/04/2011") +
  annotate("text", x = -1.3, y = 10400, label = "03/04/1974") +
  xlab("MEI")+
  ylab("AOE")+
  scale_y_log10()+
  theme(axis.text.y   = element_text(size=14),
        axis.text.x   = element_text(size=14),
        axis.title.y  = element_text(size=14),
        axis.title.x  = element_text(size=14),
        panel.background = element_blank(),
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(),
        axis.line = element_line(colour = "black")
  )

graph 

非常感谢任何关于如何获得全黑边框的建议!

3 个答案:

答案 0 :(得分:44)

要使用panel.border,您还必须使用fill=NA指定空白填充。

试试这个:

library(ggplot2)

ggplot(mtcars, aes(mpg, disp)) + geom_point() + geom_rug() +
  theme(axis.text.y   = element_text(size=14),
        axis.text.x   = element_text(size=14),
        axis.title.y  = element_text(size=14),
        axis.title.x  = element_text(size=14),
        panel.background = element_blank(),
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(),
        axis.line = element_line(colour = "black"),
        panel.border = element_rect(colour = "black", fill=NA, size=5)
  )

enter image description here

答案 1 :(得分:14)

您可以同时使用theme_bw()theme()。这应该有效:

# creating some data
set.seed(1)
d <- data.frame(MEI=rnorm(100), AOE=rlnorm(100, 10, 5))

# creating the plot
ggplot(d,aes(x=MEI, y=AOE)) +
  geom_point(shape=20, size=3) +
  geom_rug() +
  scale_y_log10() +
  theme_bw() +
  theme(panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(),
        panel.background = element_rect(colour = "black", size=4))

这给出了: enter image description here


没有theme_bw()且受@Andrie启发的解决方案,但使用panel.background代替panel.border

ggplot(d,aes(x=MEI, y=AOE)) +
  geom_point(shape=20, size=3) +
  geom_rug() +
  scale_y_log10() +
  theme(panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(),
        panel.background = element_rect(colour = "black", size=4, fill=NA))

这将给出完全相同的情节。 panel.backgroundpanel.border之间的区别在于,panel.background位于图表下方,panel.border位于图表的顶部。

答案 2 :(得分:0)

如果您使用任何 panel. 选项,您将在刻面时在每个单独的刻面周围获得边框。如果您想在整个图的外部设置边框,包括标题等,请使用 plot.background。例如:

library(ggplot2)

ggplot(mtcars, aes(mpg, disp)) + geom_point() + geom_rug() +
  labs(title = "Hello plot!") +
  facet_wrap(~cyl) +
  theme(axis.text.y   = element_text(size=14),
        axis.text.x   = element_text(size=14),
        axis.title.y  = element_text(size=14),
        axis.title.x  = element_text(size=14),
        panel.background = element_blank(),
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(),
        axis.line = element_line(colour = "black"),
        plot.background = element_rect(colour = "black", fill=NA, size=5)
  )

reprex package (v2.0.0) 于 2021 年 6 月 22 日创建