#r #ggplot2
#r #ggplot2
Вопрос:
У меня есть набор данных, и я хочу создать для него график. Мои данные и коды графика:
#Data
Days<-c("-6","-6","-6","-1","-1","-1","1","6","6","6","13","13","13","16","20","20","20","24","28","28","28","44","44","44")
Event<-c("","","","","","","H","","","","","","","P","","","","H","","","","","","")
Dummy<-c("","","","","","","1","","","","","","","1","","","","1","","","","","","")
Item <-c("DIABP","PULSE","SYSBP","DIABP","PULSE","SYSBP","","DIABP","PULSE","SYSBP","DIABP","PULSE","SYSBP","","DIABP","PULSE","SYSBP","","DIABP","PULSE","SYSBP","DIABP","PULSE","SYSBP")
Result <- c("100","68","149","98","80","142","","98","88","142","110","72","160","","102","69","159","","99","82","136","97","84","144")
#Dataframe
Sample.data <- data.frame( Days, Event,Dummy, Item, Result,stringsAsFactors = F)
Sample.data %>% mutate(ID=1) %>% mutate (Name="Jack")
#Plot
ggplot(type.convert(Sample.data))
geom_line(aes(Days, Result, group = Item, color = Item))
geom_hline(yintercept=120)
geom_hline(yintercept=80)
geom_point(aes(x = Days, y =Dummy ))
geom_text(aes(x = Days, y =Dummy,label=Event,Vjust = 1.75))
график, который я получил, это:
Я хочу еще больше улучшить его, но не знаю как. Может ли кто-нибудь помочь в этом:
- Я хочу добавить вертикальную пунктирную линию там, где отмечено событие;
- Я хочу затенить область между линией (y = 120 и Y = 80);
- Я не хочу строить линию, когда Item==»» (ДЛЯ этого нет строки, но она отображалась в легенде ;
- Я хочу добавить имя в сноску или заголовок. Пожалуйста, обратите внимание, что я хочу что-то вроде Sample.data $Name вместо «Jack», так как я делаю графики для более чем 1 человека, и я буду использовать циклические коды для создания графиков, поэтому имя должно автоматически меняться само по себе.
Это будет выглядеть так:
извините за уродливый сюжет. это лучшее, что я могу получить, рисуя. 🙁
Ответ №1:
Попробуйте этот код:
library(ggplot2)
#Data
Days<-c("-6","-6","-6","-1","-1","-1","1","6","6","6","13","13","13","16","20","20","20","24","28","28","28","44","44","44")
Event<-c("","","","","","","H","","","","","","","P","","","","H","","","","","","")
Dummy<-c("","","","","","","1","","","","","","","1","","","","1","","","","","","")
Item <-c("DIABP","PULSE","SYSBP","DIABP","PULSE","SYSBP","","DIABP","PULSE","SYSBP","DIABP","PULSE","SYSBP","","DIABP","PULSE","SYSBP","","DIABP","PULSE","SYSBP","DIABP","PULSE","SYSBP")
Result <- c("100","68","149","98","80","142","","98","88","142","110","72","160","","102","69","159","","99","82","136","97","84","144")
#Dataframe
Sample.data <- data.frame( Days, Event,Dummy, Item, Result,stringsAsFactors = F)
Sample.data %>% mutate(ID=1) %>% mutate (Name="Jack")
#Create flags
Sample.data$Flag <- ifelse(Sample.data$Dummy==1,Sample.data$Days,NA)
#Plot
ggplot(type.convert(Sample.data))
geom_line(aes(Days, Result, group = Item, color = Item))
geom_ribbon(aes(x=Days,ymin=80,ymax=120),fill='blue',alpha=0.2)
geom_hline(yintercept=120)
geom_hline(yintercept=80)
geom_point(aes(x = Days, y =Dummy ))
geom_text(aes(x = Days, y =Dummy,label=Event,Vjust = 1.75))
geom_vline(aes(xintercept=Flag),lty='dashed')
scale_color_discrete(breaks=unique(Sample.data$Item[Sample.data$Item!='']))
labs(title='Jack',caption = 'Jack')
Вывод:
Комментарии:
1. Спасибо! Вы быстры! Что я должен делать, если я хочу, чтобы DIABP и SYSBP отображались в строке, а Pulse были точками?
2. Когда я использую `geom_ribbon (aes (x = Days, ymin = 80, ymax = 120), fill = ‘blue’, alpha = 0.2)’ в своих реальных данных, я получил сообщение об ошибке
Error: Discrete value supplied to continuous scale
. Что я сделал не так?3. @Stataq Ваша переменная Days должна быть типа factor или другого типа. Чтобы изменить тип линии, попробуйте
scale_linetype_manual()
4. Просто проверьте тип дней: [1] «числовой». Что мне делать? Для импульса я хочу использовать точки, а DIABP и SYSBP все еще строят график. могу ли я добавить fliter в некоторые, где ограничить
Item %in% c("DIABP", "SYSBP")
?5. @Stataq Проверьте параметры разрывов для того, что вы хотите вокруг
scale_color_discrete()
, вы можете добавить еще один другой элемент, напримерbreaks=unique(Sample.data$Item[Sample.data$Item %in% c("DIABP", "SYSBP")]