Маркировка участков, расположенных с помощью grid.arrange - PullRequest
1 голос
/ 27 января 2020

Я прикрепил несколько графиков к одной странице, используя grid.arrange.

Есть ли способ обозначить каждый график с помощью "(a)", "(b)" et c ...

Я пытался использовать geom_text, но он не совместим с моими графиками ....

my plots

.... как вы Как видите, geom_text странно взаимодействует с моими символами легенды.

Я покажу пример, используя данные mtcars о том, чего я пытаюсь достичь. Альтернатива geom_text, которую я нашел, - это «аннотировать», которая не взаимодействует с моими символами легенды. Тем не менее, это не легко маркировать только один аспект ....

q1=ggplot(mtcars, aes(x=mpg, y=wt)) + 
geom_line() +
geom_point()+
facet_grid(~cyl)+
annotate(geom="text", x=15, y=12, label="(a)",size=8,family="serif")

q2=ggplot(mtcars, aes(x=mpg, y=wt,)) + 
geom_line() +
geom_point()+
facet_grid(~cyl)+
annotate(geom="text", x=15, y=12, label="(b)",size=8,family="serif")


geom_text(x=15, y=5,size=8, label="(b)")

gt1 <- ggplotGrob(q1)
gt2 <- ggplotGrob(q2)


grid.arrange(gt1,gt2, ncol=1)

mtcars example

Поэтому, мой вопрос, есть ли способ пометить графики, расположенные с использованием grid.arrange, так что первый фасет на каждом графике будет помечен либо a, либо b, либо c et c ...?

Ответы [ 2 ]

1 голос
/ 27 января 2020

Если вы установите значение атрибута attribute.aes ​​= FALSE, вы можете запретить его прерывание:

ggplot(mtcars, aes(x=mpg, y=wt,col=factor(cyl))) + 
geom_line() +
geom_point()+
geom_text(inherit.aes=FALSE,aes(x=15,y=12,label="(a)"),
size=8,family="serif")+
facet_grid(~cyl)

enter image description here

Если вы хотите пометить только Первый аспект (надеюсь, я вас правильно понял), я думаю, что самый простой способ указать фрейм данных, например, если мы хотим только что-то в первом,

#place it in the first
lvl_data = data.frame(
x=15,y=12,label="(a)",
cyl=levels(factor(mtcars$cyl))[1]
)

ggplot(mtcars, aes(x=mpg, y=wt,col=factor(cyl))) + 
    geom_line() +
    geom_point()+
    geom_text(data=lvl_data,inherit.aes=FALSE,
aes(x=x,y=y,label=label),size=8,family="serif")+
    facet_grid(~cyl)

enter image description here

1 голос
/ 27 января 2020

Вы можете использовать ggarrange из ggpubr пакета и устанавливать метки для каждого графика, используя аргумент labels:

library(ggplot2)
library(ggpubr)
q1=ggplot(mtcars, aes(x=mpg, y=wt)) + 
  geom_line() +
  geom_point()+
  facet_grid(~cyl)+
  annotate(geom="text", x=15, y=12, label="(a)",size=8,family="serif")

q2=ggplot(mtcars, aes(x=mpg, y=wt,)) + 
  geom_line() +
  geom_point()+
  facet_grid(~cyl)+
  annotate(geom="text", x=15, y=12, label="(b)",size=8,family="serif")                                                         

ggarrange(q1,q2, ncol = 1, labels = c("a)","b)"))

enter image description here

Это то, что вы ищете?

...