Отображение процентного изменения для большого числа факторов на одном и том же рисунке с использованием 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 это может удовлетворить ваши цели.

Другие вопросы по тегам