Załóżmy, że mam ramkę danych

rn = c('disease1', 'disease1', 'disease2', 'disease2') 
coef = c(0.1, 0.2, 0.3, 0.4) 
std = c(0.003, 0.003, 0.002, 0.0004) 
group = c(1,0,1,0)
df = data.frame(rn, coef, std)  

Chcę zrobić fabułę, gdzie otrzymałbym współczynnik i standardowy błąd wykreślony dla każdego podanego rn, ale zrób to przez czynniki (grupa = 1 lub grupa = 0)

Na razie mój kod jest

library('ggplot2')
plot_heterogenous <- ggplot(df, aes(x=factor(rn), y=coef)) +
  geom_hline(yintercept = 0, color='firebrick') +
  geom_point(aes(fill=as.factor(group))) +
  geom_errorbar(aes(ymin=wave1_coef-wave1_std, ymax=wave1_coef+wave1_std), width=0, color="steelblue4") + 
  coord_flip() + scale_y_continuous(limits = c(-0.2, 0.2)) +
  theme_bw()+
  theme(panel.grid.major.x = element_blank(), 
        panel.grid.minor.x = element_blank(),
        panel.border = element_blank())+
  labs(y= "Treatment effect (standard deviations)", x="")

Ale nie wyświetla go jak zgrupowany boxplot tak, jak chciałbym. Zamiast tego po prostu wykresuje punkt obok drugiego w odniesieniu do grupy, podczas gdy chciałbym, aby coś w rodzaju tego Przykład.

example

2
Lola1993 21 październik 2020, 04:00

1 odpowiedź

Najlepsza odpowiedź

Czy chcesz po prostu mieć punkty w każdym rn przesunięte w zależności od grupy? W takim przypadku chcesz użyć pozycji "Dodge":

df = data.frame(rn = factor(c('disease1', 'disease1', 'disease2', 'disease2') )
                coef = c(0.1, 0.2, 0.3, 0.4) 
                std = c(0.003, 0.003, 0.002, 0.0004) 
                group = factor(c(1,0,1,0)))  

ggplot(df, aes(x=rn, y=coef)) +
  geom_point(aes(color=group), position = position_dodge(.9)) +
  geom_hline(yintercept = 0, color='firebrick')

graph using position dodge

0
Alexlok 21 październik 2020, 04:35