【问题标题】:How can one plot a subset of the data on the same graph as the full dataset?如何在与完整数据集相同的图表上绘制数据子集?
【发布时间】:2018-07-03 15:15:08
【问题描述】:

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

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

一个可重现的代码示例如下:

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 或与数据相同”

这似乎暗示它不喜欢在与原版相同的轴上绘制不同长度的子集,但在玩过它之后我碰壁了。

【问题讨论】:

  • 2) 避免在`aes中使用$
  • 3) 您可以在每个函数的“data”参数中对数据进行子集化,目前您不这样做
  • 最后但同样重要的是:Subset and ggplot2的可能重复
  • 问题已解决,我试图在 aes() 括号内获取数据。感谢所有的帮助。我现在就写出来。

标签: r ggplot2


【解决方案1】:

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

解决的代码如下:

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)

它给出了以下输出(如预期的那样)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多