Как я могу отредактировать легенду, чтобы она соответствовала моим цветным группам в geom_dotplot? - PullRequest
0 голосов
/ 18 января 2020

Я делаю двухгрупповой точечный график, сравнивая каждую группу по их способности достичь определенного процента от 4 различных результатов. Прямо сейчас у меня есть график, как я хочу, показывая 2 цвета (по одному для каждой группы) и среднее значение плюс стандартное отклонение в черном. Моя проблема в том, что моя легенда показывает средние точки как две разные группы, и я хочу, чтобы они отображали цветные точки группы. Любая идея, как я могу это исправить, не меняя среднее значение на цвет групп? График и код прилагаются. Спасибо!

####GG Plot Package
library(ggplot2)

####Using tapply function
perc = read.csv("sealedvsunsealed.csv", header=TRUE)
perc
percmean <- tapply(perc$Percentage, list(perc$Group, perc$Hydrogels), mean) 
percsd <- tapply(perc$Percentage, list(perc$Group, perc$Hydrogels), sd) 
percmean
percsd

####Subseting the data (which function)
GI <- perc[which(perc$Hydrogels == 'Successful \nInjection'),]
A <- perc[which(perc$Hydrogels == 'Aggregation\nObserved'),]
CA <- perc[which(perc$Hydrogels == 'Cylindrical \nAggregates'),]
CLA <- perc[which(perc$Hydrogels == 'Fully Fills\nChannel'),]

GI
A
CA
CLA

####Create an ANOVA table
GI.aov <- aov(Percentage ~ Group, data = GI)
A.aov <- aov(Percentage ~ Group, data = A)
CA.aov <- aov(Percentage ~ Group, data = CA)
CLA.aov <- aov(Percentage ~ Group, data = CLA)

####Conduct a Tukey's multiple comparision procedure
TukeyHSD(GI.aov)
TukeyHSD(A.aov)
TukeyHSD(CA.aov)
TukeyHSD(CLA.aov)

####Grouped Dot Plot with stats added

vF = ggplot(perc, aes(x=factor(perc$Hydrogels, level = level_order), y=Percentage, fill=perc$Group)) +
  geom_dotplot(binaxis='y', stackdir='center', position = position_dodge(0.7))+
  theme(legend.position = "right",  legend.title = element_blank(),
        panel.background = element_blank(),
        axis.line = element_line(colour = "black"),
        axis.text = element_text(size = rel(1.5)),
        axis.title.y = element_text(size = rel(1.5)))
vF

vF +  stat_summary(fun.y=mean, geom ="point", shape=18, size=4, position = position_dodge(0.7)) +         
  stat_summary(fun.ymin=function(x)(mean(x)-sd(x)), 
               fun.ymax=function(x)(mean(x)+sd(x)),
               position = position_dodge(0.7),
               colour = "black",
               geom="errorbar", width=0.3, size=1)+
  labs(x = NULL)

Данные

График показывает правильное расположение, но неверную легенду

1 Ответ

0 голосов
/ 18 января 2020

Обратите внимание, что вы пропустили level_order из вашего кода, я догадался об этом из вашего графика

level_order = levels(perc$Hydrogels)[c(4,1,2,3)]

Если вы можете обойтись без легенды о среднем (то есть ромба), вы можете просто сделать:

vF +  stat_summary(fun.y=mean, geom ="point", shape=18, size=4, 
position = position_dodge(0.7),show.legend=FALSE) +
new_scale_color()+         
  stat_summary(fun.ymin=function(x)(mean(x)-sd(x)), 
               fun.ymax=function(x)(mean(x)+sd(x)),
               position = position_dodge(0.7),
               colour = "black",
               geom="errorbar", width=0.3, size=1)

enter image description here

...