Как сортировать и раскрашивать точечные участки на графике с помощью сетки граней и уклонения позиции? - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть граненый сетчатый график двух групп моделей с фиксированными эффектами.В первой группе я хочу подавить управляющую переменную (показана зеленым цветом).Во второй группе я хочу показать контрольные переменные, если в модели есть переменная с position_dodgev().

Пока я понял этот код:

library(ggplot2)
library(ggstance)
ggplot(mf, aes(fill=mn)) +
  geom_vline(xintercept=0) +
  geom_pointrangeh(aes(y=mn, x=coef, group=cv, color=cv, 
                       xmin=coef - se*1.96, xmax=coef + se*1.96),
                   position=position_dodgev(.5),
                   show.legend=FALSE) +
  scale_color_manual(values=c("green", "red", "green", "red")) +
  facet_grid(gr ~ ., scales="free", space="free")

, который дает мне это:

enter image description here

Однаков модели 1 пояснительная переменная дублируется, а пояснительная переменная в моделях группы 2 не всегда находится сверху.

Я действительно хочу выглядеть на графике так (фотоделал):

enter image description here

Как это возможно с ggplot()?


Данные

mf <- structure(list(coef = c(3.025, 0.762499999999999, -1.44237073106609, 
-0.125042600081792, -0.689108910891089, 2.64264321029771, 2.64264321029771
), se = c(5.26319027539381, 3.34469904756018, 2.02098677878979, 
2.02098677878979, 2.02098677878979, 0.763989041657158, 0.763989041657158
), mn = structure(c(1L, 1L, 2L, 2L, 3L, 4L, 4L), .Label = c("Model 2c", 
"Model 2b", "Model 2a", "Model 1"), class = "factor"), gr = c(2, 
2, 2, 2, 2, 1, 1), cv = structure(c(2L, 1L, 2L, 3L, 2L, 2L, 3L
), .Label = c("gear", "vs", "disp"), class = "factor")), row.names = c("vs", 
"gear", "vs1", "disp", "1", "11", "2"), class = "data.frame")

1 Ответ

0 голосов
/ 18 декабря 2018

Несколько небольших изменений в ваших данных помогут исправить сюжет.Во-первых, мы можем удалить дублированную строку для Модели 1. Во-вторых, проблемы с порядком изменения цветов cv состоят в том, что у вас есть разные управляющие переменные между Моделями 2a и 2b.Мы можем создать столбец индикатора, чтобы просто сказать, является ли строка управляющей переменной, и использовать его для окрашивания графика.

library(tidyverse)
library(ggstance)

mf %>% 
  #remove the dupe from Model 1
  filter(!(mn == "Model 1" & cv == "disp")) %>% 
  #create an indicator column for control variables
  mutate(Control = cv == "vs") %>% 
  ggplot(aes(fill=mn)) +
  geom_vline(xintercept=0) +
  #group and color using our new indicator variable
  geom_pointrangeh(aes(y=mn, x=coef, group=Control, color=Control, 
                       xmin=coef - se*1.96, xmax=coef + se*1.96),
                   position=position_dodgev(.5),
                   show.legend=FALSE) +
  scale_color_manual(values=c("green", "red", "green", "red")) +
  facet_grid(gr ~ ., scales="free", space="free")

final plot

...