Как объединить легенды о точках и боксплотах в ggplot2? - PullRequest
0 голосов
/ 17 марта 2020

Ниже приведен пример моих данных (только некоторые строки)

# plotshear data:

#      Source     Shear        LLDF
# 1   Baseline   EXT.Single   0.7627894
# 2   Samples    EXT.Single   0.7130376
# 3   Baseline   EXT.Multi    0.8521338
# 4   Samples    EXT.Multi    0.7975502
# 5   Baseline   INT.Single   0.5706947
# 6   Samples    INT.Single   0.5462812
# 7   Baseline   INT.Multi    0.7291602
# 8   Samples    INT.Multi    0.7331171
# 9   AASHTO     EXT.Multi    0.8250000
# 10  AASHTO     INT.Single   0.7200000
# 11  AASHTO     INT.Multi    0.8840000

Я использую следующий код для генерации своего боксплота и наложения точек «Базовая линия» и «AASHTO» сверху. Мне нужно, чтобы эти пункты были включены в мою легенду, но я не могу их отобразить.

library(reshape2)
library(ggplot2)
meltshear <- melt(Shear)
samples <- rep(c("Samples"), each = 10)
baseline <- c("Baseline",samples)
method <- rep(baseline, 4)
xlab <- rep(c("EXT.Single","EXT.Multi","INT.Single","INT.Multi"), each = 11)
plotshear <- data.frame(Source = c(method,"AASHTO","AASHTO","AASHTO"), 
                    Shear = c(xlab,"EXT.Multi","INT.Single","INT.Multi"), 
                    LLDF = c(meltshear[,2],0.825,0.720,0.884))
data <- subset(plotshear, Source %in% c("Samples"))
baseline <- subset(plotshear, Source %in% c("Baseline"))
AASHTO <- subset(plotshear, Source %in% c("AASHTO"))
ggplot(data = data, aes(x = Shear, y = LLDF, colour = Source)) + geom_boxplot(outlier.shape = NA) +
  stat_summary(fun = mean, geom="point", shape=23, size=3) + 
  stat_boxplot(geom='errorbar', linetype=1, width=0.5) + 
  geom_jitter(data = baseline, colour = "green4") +
  geom_jitter(data = AASHTO, colour = "red") +
  scale_color_manual(values=c("black","green4","red"), labels=c("Samples","Baseline","AASHTO")) + 
  theme(legend.title=element_blank()) + ggtitle("Live Load Distribution Factors for Shear")

Я не уверен, как их переопределить. Точки «Базовая линия» и «AASHTO» не находятся в данных, используемых для построения графика, но я хочу, чтобы они были ориентирами на графике. Сюжет у меня выглядит так:

Plot

1 Ответ

2 голосов
/ 17 марта 2020

Попробуйте следующее. Хитрость заключается в том, чтобы вызвать geom_jitter только один раз путем поднабора значений Source != 'Samples' и позволить aestheti c colour выполнить свою работу.

ggplot(data = subset(plotshear, Source == 'Samples'), aes(Shear, LLDF)) +
  geom_boxplot(linetype = 1, width = 0.5) +
  stat_summary(fun.y = mean, geom = 'point', shape = 23, size = 3) +
  geom_jitter(data = subset(plotshear, Source != 'Samples'), aes(colour = Source)) +
  scale_colour_manual(values = c('red', 'green4', 'black')) +
  theme(legend.title = element_blank()) + 
  ggtitle("Live Load Distribution Factors for Shear")

Данные.

plotshear <- read.table(text = "
     Source     Shear        LLDF
 1   Baseline   EXT.Single   0.7627894
 2   Samples    EXT.Single   0.7130376
 3   Baseline   EXT.Multi    0.8521338
 4   Samples    EXT.Multi    0.7975502
 5   Baseline   INT.Single   0.5706947
 6   Samples    INT.Single   0.5462812
 7   Baseline   INT.Multi    0.7291602
 8   Samples    INT.Multi    0.7331171
 9   AASHTO     EXT.Multi    0.8250000
 10  AASHTO     INT.Single   0.7200000
 11  AASHTO     INT.Multi    0.8840000
", header = TRUE)
...