Добавление дополнительной легенды с помощью geom_hline при одновременном контроле типов линий и пользовательских меток - PullRequest
0 голосов
/ 04 июля 2019

Я хотел бы иметь граненый блок-график, где у меня есть различия по оси Y и участников исследования по оси X для каждого устройства силовой тренировки. Поскольку я хотел включить медиану отдельных устройств, я создал дополнительные data.frame:

structure(list(Machine = c("ABDUCTOR", "ADDUCTOR", "CHEST PRESS", 
"LEG CURL", "LEG EXTENSION", "LEG PRESS", "LOWER BACK", "TOTAL ABDOMINAL", 
"VERTICAL TRACTION"), med = c(-180, -175, -120, -85, -100, -150, 
-92.5, -85, -115), solid = c("solid", "solid", "solid", "solid", 
"solid", "solid", "solid", "solid", "solid")), row.names = c(NA, 
-9L), class = "data.frame")

Сюжет получается неплохо, но сейчас я сталкиваюсь с проблемой, что я хотел бы иметь дополнительную легенду на стороне, которая указывает медиану (yintercept) каждого отдельного устройства. Я уже давно борюсь с трудностями и не смог найти в сети решения, которое позволило бы мне контролировать linetype = "solid" и добавлять медианные значения для каждого устройства, включая имя устройства в легенде.

median_con<-as.data.frame(all_data_wide %>% group_by(Machine) %>% filter(Contraction_Mode_Levels=="Con") %>% summarise(med=median(RaterSmartphone_Diff, na.rm=TRUE)))
median_con$solid<-rep(c("solid"))

plot_con<-ggplot(all_data_wide %>% filter(Contraction_Mode_Levels=="Con")) +
  aes(x = Participant, y = RaterSmartphone_Diff, colour = Participant, fill=Participant) +
  geom_boxplot(outlier.shape = NA) +
  scale_color_viridis_d(option = "viridis") +
  theme_classic() +
  #geom_hline(yintercept=0, color = "black", size=1, linetype="dotted",)+
  geom_hline(data = median_con, aes(yintercept = med,linetype=as.factor(median_con$solid)), size=1,  show.legend =TRUE)+
  scale_linetype_manual(name = "Median per Machine", values = as.factor(median_con$Machine), labels = c("A", "B", "C"),guide = guide_legend(override.aes = list(color = c("black"))))+
  facet_wrap(vars(Machine))+
  coord_cartesian(ylim = c(-1000, 1000))+
  theme(text = element_text(size = 16),axis.text = element_text(size = 12),plot.title = element_text(hjust = 0.5),plot.margin=unit(c(1,1,1.8,1.2),"cm"))+
  labs(y = "Video - Algorithm [ms]")+
  ggtitle(" Concentric Contraction Difference Video - Algorithm per Machine" )
plot_con

enter image description here

Желаемая легенда выводится красным цветом. Заранее большое спасибо за полезный вклад.

...