аспекты ggplot: показывать аннотированный текст в выбранных аспектах

Я хочу создать граненый сюжет 2 на 2 с вертикальной линией, разделяемой четырьмя гранями. Однако, поскольку фасеты вверху имеют ту же информацию о дате, что и фасеты внизу, я хочу, чтобы vline аннотировался только дважды: в этом случае в двух фасетах внизу.

Я посмотрел а.о. здесь, что не работает для меня. (Кроме того, у меня есть сомнения, является ли этот код все еще действительным сегодня.) Я также посмотрел здесь. Я также посмотрел, как повлиять на размер шрифта в geom_text: согласно страницам справки, это size. В случае ниже это не работает хорошо.

Это мой код:

library(ggplot2)
library(tidyr)

my_df <- read.table(header = TRUE, text = 
                      "Date AM_PM First_Second Systolic Diastolic Pulse 
                    01/12/2017 AM 1 134 83 68 
                    01/12/2017 PM 1 129 84 76
                    02/12/2017 AM 1 144 88 56
                    02/12/2017 AM 2 148 93 65
                    02/12/2017 PM 1 131 85 59
                    02/12/2017 PM 2 129 83 58
                    03/12/2017 AM 1 153 90 62
                    03/12/2017 AM 2 143 92 59
                    03/12/2017 PM 1 139 89 56
                    03/12/2017 PM 2 141 86 56
                    04/12/2017 AM 1 140 87 58
                    04/12/2017 AM 2 135 85 55
                    04/12/2017 PM 1 140 89 67
                    04/12/2017 PM 2 128 88 69
                    05/12/2017 AM 1 134 99 67
                    05/12/2017 AM 2 128 90 63
                    05/12/2017 PM 1 136 88 63
                    05/12/2017 PM 2 123 83 61
                    ")

# setting the classes right
my_df$Date <- as.Date(as.character(my_df$Date), format = "%d/%m/%Y")
my_df$First_Second <- as.factor(my_df$First_Second)

# to tidy format
my_df2 <- gather(data = my_df, key = Measure, value = Value, 
                  -c(Date, AM_PM, First_Second), factor_key = TRUE)

# Measures in 1 facet, facets split over AM_PM and First_Second
## add anntotations column for geom_text
my_df2$Annotations <- rep("", 54)
my_df2$Annotations[c(4,6)] <- "Start"

p2 <- ggplot(data = my_df2) +
  ggtitle("Blood Pressure and Pulse as a function of AM/PM,\n Repetition, and date") +
  geom_line(aes(x = Date, y = Value, col= Measure, group = Measure), size = 1.)  +
  geom_point(aes(x = Date, y = Value, col= Measure, group = Measure), size= 1.5) +
  facet_grid(First_Second ~ AM_PM) +
  geom_vline(aes(xintercept = as.Date("2017/12/02")), linetype = "dashed", 
             colour = "darkgray") + 
  theme(axis.text.x=element_text(angle = -90)) 

p2

дает этот график: введите здесь описание изображения

Это основной сюжет, с которого я начинаю. Теперь попробуем аннотировать.

p2 + annotate(geom="text", x = as.Date("2017/12/02"), y= 110, label="start", size= 3) 

что дает этот сюжет:

введите здесь описание изображения

У этого графика есть проблема, заключающаяся в том, что аннотация встречается 4 раза, а мы хотим, чтобы она была только в нижней части графика.

Теперь мы используем geom_text, который будет использовать столбец «Аннотации» в нашем фрейме данных в соответствии с этот SO-вопрос. Будьте осторожны, столбец, добавленный в фреймворк данных, должен присутствовать, когда вы создаете «p2» в первый раз (именно поэтому мы добавили столбец выше)

p2 + geom_text(aes(x=as.Date("2017/12/02"), y=100, label = Annotations, size = .6))

что дает этот сюжет:

введите здесь описание изображения

Да, получить аннотацию удалось только в двух нижних частях графика. Но шрифт слишком большой ( ... и некрасивый), и когда мы пытаемся исправить его с помощью size, интересны две вещи: (1) размер шрифта не изменяется (хотя вы ожидаете этого из справочных страниц) и ( 2) добавлена ​​легенда.

Я много щелкал и не смог решить эту проблему через несколько часов. Любая помощь будет оценена по достоинству.


person KoenV    schedule 05.12.2017    source источник
comment
Посмотрите на этот вопрос?   -  person MYaseen208    schedule 05.12.2017
comment
size (и все другие аргументы, не связанные с сопоставлением столбца данных с эстетикой) должны быть вне aes(). Это избавит от легенды и приведет к тому, что размер фактически изменит размер текста на желаемое значение.   -  person eipi10    schedule 05.12.2017
comment
@ eipi10 Это работает. Спасибо! Мне снять вопрос? Сейчас это выглядит довольно нелепо.   -  person KoenV    schedule 05.12.2017
comment
Если ваша проблема решена, и нужно было просто переместить size за пределы aes, вы можете удалить его или я могу пометить его как дубликат. Какой бы вы ни предпочли.   -  person eipi10    schedule 05.12.2017
comment
@ eipi10 eipi10 Я потратил на это несколько часов, проблема довольно хорошо сформулирована, решение может помочь другим неспециалистам. Я предпочитаю не удалять его.   -  person KoenV    schedule 05.12.2017