Я хочу создать граненый сюжет 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) добавлена легенда.
Я много щелкал и не смог решить эту проблему через несколько часов. Любая помощь будет оценена по достоинству.
size
(и все другие аргументы, не связанные с сопоставлением столбца данных с эстетикой) должны быть внеaes()
. Это избавит от легенды и приведет к тому, что размер фактически изменит размер текста на желаемое значение. - person eipi10   schedule 05.12.2017size
за пределыaes
, вы можете удалить его или я могу пометить его как дубликат. Какой бы вы ни предпочли. - person eipi10   schedule 05.12.2017