Программирование легенды соединения в ggplot2 для нескольких регрессий с переменной группировки - PullRequest
0 голосов
/ 26 мая 2019

У меня есть четыре графика регрессии, которые не только основаны на переменной ax и y, но также сгруппированы по переменной группировки z (v_187_corr).Итак, легенда содержит все группы, которые хранятся в v_187.Теперь я хочу собрать все свои 4 графика в окне 2x2 и разместить одну общую легенду со всеми именами групп.

(я нашел несколько примеров, которые все же сильно отличались от моего примера).

par(mfrow = c(2, 2))


# First Plot: Passung auf Zufriedenheit
p1 <- ggplot(df.hlm_cc_select, aes(zPssg_sd, zZufri))

p1 + geom_jitter(aes(colour = v_187_corr))+
  labs(title="Zufriedenheit erklärt durch Direktheit",x="Direktheit", y = "Zufriedenheit") +   
    scale_color_viridis(discrete = TRUE, option = "A")+
    scale_fill_viridis(discrete = TRUE) +
    theme_dark() +
    theme(axis.line.x = element_line(colour = 'black', size=0.5, linetype='solid'),
         axis.line.y = element_line(colour = 'black', size=0.5, linetype='solid')) +
    #geom_smooth(aes(x = zagree_group_withinmeet_levelrat, y = zZufri), inherit.aes = FALSE, se = FALSE)+
    geom_smooth(method=lm, color="black")



# Second Plot: Homogenität Problemart auf Zufriedenheit

p2 <- ggplot(df.hlm_cc_select, aes(zmean.aggr.prb_sd, zZufri))

p2 + geom_jitter(aes(colour = v_187_corr))+
  labs(title="Zufriedenheit erklärt durch Homogenität (Problemart)",x="Homogenität (Problemart)", y = "Zufriedenheit") +   
    scale_color_viridis(discrete = TRUE, option = "A")+
    scale_fill_viridis(discrete = TRUE) +
    theme_dark() +
    theme(axis.line.x = element_line(colour = 'black', size=0.5, linetype='solid'),
         axis.line.y = element_line(colour = 'black', size=0.5, linetype='solid')) +
    #geom_smooth(aes(x = zagree_group_withinmeet_levelrat, y = zZufri), inherit.aes = FALSE, se = FALSE)+
    geom_smooth(method=lm, color="black")


# Third Plot: Homogenität Level auf Zufriedenheit
p3 <- ggplot(df.hlm_cc_select, aes(zagree_group_withinmeet_levelrat, zZufri))

p3 + geom_jitter(aes(colour = v_187_corr))+
  labs(title="Satisfaction explained by Homogeneity (Level)",x="Homogeneity (Level)", y = "Satisfaction") +   
    scale_color_viridis(discrete = TRUE, option = "A")+
    scale_fill_viridis(discrete = TRUE) +
    theme_dark() +
    theme(axis.line.x = element_line(colour = 'black', size=0.5, linetype='solid'),
         axis.line.y = element_line(colour = 'black', size=0.5, linetype='solid')) +
    #geom_smooth(aes(x = zagree_group_withinmeet_levelrat, y = zZufri), inherit.aes = FALSE, se = FALSE)+
    geom_smooth(method=lm, color="black")


# Forth Plot: Intensität auf Zufriedenheit
p4 <- ggplot(df.hlm_cc_select, aes(zmeans_levelsums, zZufri))

p4 + geom_jitter(aes(colour = v_187_corr))+
  labs(title="Zufriedenheit erklärt durch Intensität",x="Intensität", y = "Zufriedenheit") +   
    scale_color_viridis(discrete = TRUE, option = "A")+
    scale_fill_viridis(discrete = TRUE) +
    theme_dark() +
    theme(axis.line.x = element_line(colour = 'black', size=0.5, linetype='solid'),
         axis.line.y = element_line(colour = 'black', size=0.5, linetype='solid')) +
    #geom_smooth(aes(x = zagree_group_withinmeet_levelrat, y = zZufri), inherit.aes = FALSE, se = FALSE)+
    geom_smooth(method=lm, color="black")

1 Ответ

1 голос
/ 27 мая 2019

Предполагается, что ваши данные выглядят примерно так:

df.hlm_cc_select <- data.frame(zZufri = runif(10,0,1),
                               zmeans_levelsums = runif(10,0,1),
                               zagree_group_withinmeet_levelrat = runif(10,0,1),
                               zmean.aggr.prb_sd = runif(10,0,1),
                               zPssg_sd = runif(10,0,1),
                               v_187_corr = runif(10,0,1))

Вы можете использовать пакет tidyr (среди других опций, таких как reshape2::melt и data.table::melt), чтобы собрать все переменные в один столбец (назовем это value).

В этом процессе вы должны исключить zZufri (ваша ось x?) И переменную цвета v_187_corr, используя -zZufri, -v_187_corr. Столбец key указывает, какая переменная связана с каждым значением.

df <- gather(df.hlm_cc_select,key="key",value="value",-zZufri, -v_187_corr)

Затем, используя ggplot, вы можете просто добавить facet_wrap(~key), который говорит, что создайте фазовый график по одному для каждого уникального значения в key

ggplot(df,aes(x=value,y=zZufri,col=v_187_corr))+
  geom_jitter()+
  scale_color_viridis(discrete = TRUE, option = "A")+
  scale_fill_viridis(discrete = TRUE) +
  theme_dark() +
  theme(axis.line.x = element_line(colour = 'black', size=0.5, linetype='solid'),
        axis.line.y = element_line(colour = 'black', size=0.5, linetype='solid')) +
  inherit.aes = FALSE, se = FALSE)+
  geom_smooth(method=lm, color="black")+
  facet_wrap(~key)

Для всех сюжетов будет только одна легенда.

...