ggplot2 - график с линией и точками для двух проблем с легендой наборов данных

Я строю два набора данных с помощью ggplot. Одна должна быть линией, другая должна быть точками. Я могу заставить это работать как ниже:

d1 <- filter(d, variable==lineVar)
d2 <- filter(d, variable==dotVar)
g <- ggplot(d1, aes(clarity, x=xv, y=yv))
g <- g + geom_line(aes(colour=variable))
g <- g + ggtitle(title)
g <- g + xlab(xl)
g <- g + ylab(yl)
g <- g + geom_point(data=d2, size=4, aes(colour=variable))

Вывод ggplot2

Единственная проблема - это легенда! Как видите, у "наблюдаемого" набора данных есть легенда + точка в легенде, когда она действительно должна быть точкой. И наоборот для "предсказано", это должна быть просто линия.

Есть ли способ получить более чистую / более точную легенду?

1 ответ

Решение

Вы можете изменить легенду без изменения сюжета, используя override.aes, Вы не предоставили пример данных, поэтому я использовал встроенный mtcars Фрейм данных для иллюстрации. Ключевая строка кода начинается с guides, shape=c(16,NA) избавляется от одного из маркеров точки легенды, устанавливая его цвет NA, linetype=c(0,1) избавляется от линии другой легенды, устанавливая ее тип линии в 0, Кроме того, вам не нужно сохранять график после каждой строки кода. Просто добавьте + к каждой строке и объедините их все в один оператор, как в примере ниже.

library(reshape2)
library(ggplot2)

mtcars$mpg.line = mtcars$mpg
mtcars.m = melt(mtcars[,c("mpg","mpg.line","wt")], id.var="wt")
mtcars.m$variable = factor(mtcars.m$variable)

ggplot() +
  geom_line(data=mtcars.m[mtcars.m$variable=="mpg.line",],
             aes(wt, value, colour=variable), lwd=1) +
  geom_point(data=mtcars.m[mtcars.m$variable=="mpg",],
             aes(wt, value, colour=variable), size=3) +
  guides(colour=guide_legend(override.aes=list(shape=c(16,NA), linetype=c(0,1)))) +
  theme_grey(base_size=15)

введите описание изображения здесь

Другие вопросы по тегам