我在ggplot2中遇到与管道运算符有关的问题。我的数据集是“iris”,我的代码是:
iris %>%
mutate(petalPlus = as.factor(ifelse(Petal.Length > 5.5, 1, 0))) %>%
ggplot(aes(x = Petal.Length, y = Petal.Width, col = Species, shape =
petalPlus)) +
geom_point() +
theme_bw() +
geom_smooth(method = "lm")
问题在于我得到的是4条线性回归线(适用于每种颜色和形状)。我想知道如何获得一条回归线,目前我得到4条线的原因是什么。
答案 0 :(得分:3)
这不是因为您使用管道操作员,而是因为您将所有aes
规格放在一起。这意味着geom_smooth
函数需要颜色和形状的所有组合的不同行。一种方法是颠倒geom调用的顺序,并根据您的规范定制单独的aes
:
png()
print(
iris %>%
mutate(petalPlus = as.factor(ifelse(Petal.Length > 5.5, 1, 0))) %>%
ggplot(aes(x = Petal.Length, y = Petal.Width)) +
theme_bw() +
geom_smooth(method = "lm")+
geom_point(aes(col=Species,shape=petalPlus))
dev.off() )
答案 1 :(得分:2)
由于geom_smooth
从shape
调用继承了col
和aes
ggplot
,因此会得到4行,并且他们隐式定义group
aes
。
要避免它在每个geom中定义aes
,或仅在geom_smooth
中定义它们,请禁用继承:
library(dplyr)
library(ggplot2)
iris %>%
mutate(petalPlus = as.factor(ifelse(Petal.Length > 5.5, 1, 0))) %>%
ggplot() +
geom_point(aes(x = Petal.Length,
y = Petal.Width,
col = Species,
shape = petalPlus)) +
theme_bw() +
geom_smooth(aes(x = Petal.Length, y = Petal.Width), method = "lm")
iris %>%
mutate(petalPlus = as.factor(ifelse(Petal.Length > 5.5, 1, 0))) %>%
ggplot(aes(x = Petal.Length,
y = Petal.Width,
col = Species,
shape = petalPlus)) +
geom_point() +
theme_bw() +
geom_smooth(aes(x = Petal.Length, y = Petal.Width), method = "lm", inherit.aes = FALSE)
由reprex package(v0.2.0)创建于2018-05-23。