Отображение процентного изменения для большого числа факторов на одном и том же рисунке с использованием ggplot по факторам огранки или цветовой кодировки
Вот пример кода, с которым я работаю
x<-as.factor(rep(c("tree_mean","tree_qmean","tree_skew"),3))
factor<-c(rep("mfn2_burned_99",3),rep("mfna_burned_5_7",3),rep("mfna_burned_5_7_10_12",3)))
y<-c(0.336457409,-0.347422910,-0.318945621,1.494109367, 0.003578698,-0.019985780,-0.484171146, 0.611589217,-0.322292664)
dat<-as.data.frame(cbind(x,factor,y))
head(dat)
x factor y
tree_mean mfn2_burned_99 -0.3364574
tree_qmean mfn2_burned_99 -0.3474229
tree_skew mfn2_burned_99 -0.3189456
tree_mean mfna_burned_5_7 -0.8269814
tree_qmean mfna_burned_5_7 -0.8088810
tree_skew mfna_burned_5_7 -2.5429226
tree_mean mfna_burned_5_7_10_12 -0.8601206
tree_qmean mfna_burned_5_7_10_12 -0.8474920
tree_skew mfna_burned_5_7_10_12 -2.9854178
Я пытаюсь изобразить, насколько x отклоняется от 0, и сопоставить его с каждым фактором, как показано ниже:
ggplot(dat) +
geom_point(aes(x=x,y=y),shape=1,size=3)+
geom_linerange(aes(x=x,ymin=0,ymax=y))+
geom_hline(yintercept=0)+
facet_grid(factor~.)
Это прекрасно работает, когда у меня есть три фактора (игнорируйте *: у меня был столбец значимости, который я с тех пор удалил.
Пример ниже:
Тем не менее, у меня всего 8 факторов, и огранка затеняет график так, что расстояние от нуля для каждого значения x становится очень искаженным.
Пример ниже
Итак, мой вопрос заключается в следующем: что было бы лучшим способом кодирования / рендеринга этого графика, учитывая мое большое количество значений и факторов x с использованием фацетирования или цветового кодирования по фактору в ggplot??
Я был бы очень открыт для цветового кодирования каждого расстояния для x по коэффициенту, а не по граням, но я бился головой о стену, пытаясь понять, как это сделать в ggplot (очень плохо знакомом с ggplot), поэтому я могу еще не сказал, сделает ли это фигуру гораздо более понятной.
1 ответ
Один из вариантов, как вы заметили, это закрасить вашу точку и / или линейный диапазон с помощью коэффициента. Вы можете использовать position_dodge
немного переместить точки на оси х.
Например:
ggplot(dat, aes(color = factor)) +
geom_point(aes(x=x,y=y),shape=1,size=3, position = position_dodge(width = 0.5)+
geom_linerange(aes(x=x,ymin=0,ymax=y), position = position_dodge(width =0.5))+
geom_hline(yintercept=0)
Я думаю, что это все еще будет трудно со многими факторами, но с 8 это может удовлетворить ваши цели.