Отображение текста под графиком, созданным ggplot2

Я пытаюсь отобразить некоторую информацию о данных ниже графика, созданного в ggplot2 . Я хотел бы построить переменную N, используя координату оси X графика, но координата Y должна составлять 10% от нижней части экрана. Фактически, желаемые координаты Y уже находятся во фрейме данных как переменная y _pos.

Я могу придумать 3 подхода с использованием ggplot2:

1 )Создать пустой график под фактическим графиком, использовать тот же масштаб, а затем использовать текст geom _для построения данных по пустому графику. Этот подход работает, но чрезвычайно сложен.

2 )Используйте geom_textдля построения графика данных, но каким-то образом используйте координату Y как процент экрана (10% ). Это заставит числа отображаться под графиком. Я не могу понять правильный синтаксис.

3 )Используйте grid.text для отображения текста. Я могу легко установить его на 10% от нижней части экрана, но я не могу понять, как установить координату X, чтобы она соответствовала сюжету. Я попытался использовать grconvert для захвата начальной позиции X, но не смог заставить это работать.

Ниже приведен базовый график с фиктивными данными.:

graphics.off()      # close graphics windows   

library(car)
library(ggplot2)  #load ggplot
library(gridExtra) #load Grid
library(RGraphics) # support of the "R graphics" book, on CRAN

#create dummy data
test= data.frame(
  Group = c("A", "B", "A","B", "A", "B"), 
  x = c(1,1,2,2,3,3 ),
  y = c(33,25,27,36,43,25),
  n=c(71,55,65,58,65,58),
  y_pos=c(9,6,9,6,9,6)
  )

#create ggplot
p1 <- qplot(x, y, data=test, colour=Group) +
  ylab("Mean change from baseline") + 
  geom_line()+
  scale_x_continuous("Weeks", breaks=seq(-1,3, by = 1) ) +
  opts( 
        legend.position=c(.1,0.9))

#display plot
p1

На модифицированном графике ниже отображаются номера субъектов, однако они отображаются ВНУТРИ графика. Они заставляют масштаб Y быть расширенным. Я хотел бы отобразить эти числа НИЖЕ сюжета.

    p1 <- qplot(x, y, data=test, colour=Group) +
  ylab("Mean change from baseline") + 
  geom_line()+
  scale_x_continuous("Weeks", breaks=seq(-1,3, by = 1) ) +
  opts( plot.margin = unit(c(0,2,2,1), "lines"),
        legend.position=c(.1,0.9))+
  geom_text(data = test,aes(x=x,y=y_pos,label=n))

p1

Другой подход к отображению чисел включает создание фиктивного графика под реальным графиком. Вот код :

graphics.off()      # close graphics windows   

library(car)
library(ggplot2)  #load ggplot
library(gridExtra) #load Grid
library(RGraphics) # support of the "R graphics" book, on CRAN

#create dummy data
test= data.frame(
  group = c("A", "B", "A","B", "A", "B"), 
  x = c(1,1,2,2,3,3 ),
  y = c(33,25,27,36,43,25),
  n=c(71,55,65,58,65,58),
  y_pos=c(15,6,15,6,15,6)
  )


p1 <- qplot(x, y, data=test, colour=group) +
  ylab("Mean change from baseline") + 
  opts(plot.margin = unit(c(1,2,-1,1), "lines")) +
  geom_line()+
  scale_x_continuous("Weeks", breaks=seq(-1,3, by = 1) ) +
  opts(legend.position="bottom",
       legend.title=theme_blank(),
       title.text="Line plot using GGPLOT") 
p1

p2 <- qplot(x, y, data=test, geom="blank")+
  ylab(" ")+
  opts(     plot.margin = unit(c(0,2,-2,1), "lines"),
            axis.line = theme_blank(), 
            axis.ticks = theme_segment(colour = "white"),           
            axis.text.x=theme_text(angle=-90,colour="white"),
            axis.text.y=theme_text(angle=-90,colour="white"),
            panel.background = theme_rect(fill = "transparent",colour = NA), 
            panel.grid.minor = theme_blank(),      
            panel.grid.major = theme_blank()
            )+
  geom_text(data = test,aes(x=x,y=y_pos,label=n)) 
p2

grid.arrange(p1, p2, heights = c(8.5, 1.5),             nrow=2 )

. Однако он очень сложен и его трудно модифицировать для других данных. В идеале я хотел бы иметь возможность передавать координаты Y в процентах от экрана.

35
задан Cœur 28 July 2018 в 05:25
поделиться