一个人如何在完整的数据集的同一张图上绘制数据的子集?

时间:2018-07-03 15:15:09

标签: r ggplot2

我希望在数据的总体图上绘制数据集子集的平滑线。

例如,在下面的图像中,我希望将右侧的绿色和蓝色数据点绘制为单独的geom_smooth行。 Full data plot

该代码的可复制示例如下:

library(datasets)
library(ggplot2)
library(tidyr)

iris_subset <- subset(iris, Species == "virginica" | Species == "versicolor")

p <- ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width, colour = Species))
p <- p + geom_point()
p <- p + geom_smooth(method="loess", colour = "black")
p <- p + geom_smooth(aes(data = iris_subset, x = Sepal.Length, y = Sepal.Width), method="loess", colour = "red")
print(p)

但是,当我尝试执行此操作时,它会引发错误“错误:美学必须为长度1或与数据相同”

这似乎暗示着它不喜欢包含与原始图形在同一轴上绘制的不同长度的子集,但是在玩了之后我撞墙了。

1 个答案:

答案 0 :(得分:0)

仅供参考,我在这里尝试从data=subset内部调用aes()

已解决的代码如下:

library(datasets)
library(ggplot2)
library(tidyr)

iris_subset <- subset(iris, Species == "virginica" | Species == "versicolor")

p <- ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width))
p <- p + geom_point(aes(colour = Species))
p <- p + geom_smooth(method="loess", colour = "black")
p <- p + geom_smooth(data = iris_subset, aes(x = Sepal.Length, y = Sepal.Width), method="loess", colour = "red")
print(p)

哪个给出以下输出(按预期)。 enter image description here