Подтвердить что ты не робот

Добавить границу панели в 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 

Любые советы о том, как получить полную черную границу, будут очень оценены!

4b9b3361

Ответ 1

Чтобы использовать 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

Ответ 2

Вы можете использовать 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.background и panel.border заключается в том, что panel.background рисуется под графиком и panel.border рисуется поверх графика.