【发布时间】:2013-02-10 05:57:40
【问题描述】:
假设我将iris 数据框熔化如下,以便使用 ggplot2 进行绘图:
meltediris <- melt(iris)
我现在可以通过从variable 列中选择它们来绘制Petal.Width 值:
ggplot(meltediris) + geom_density(aes(x=meltediris[meltediris$variable ==
"Petal.Width",]$value))
然后我想用Species 绘制Petal.Width 的值,所以我做了:
ggplot(meltediris) + geom_density(aes(x=meltediris[meltediris$variable ==
"Petal.Width",]$value, colour=Species))
它似乎有效,但我很惊讶它确实有效!数据框meltediris[meltediris$variable == "Petal.Width",]$value 的选定子集与整个融化的数据框的索引不同(它只是一个子集),那么 ggplot 如何知道选择正确的Species 值?似乎它应该要求我这样做:
ggplot(meltediris) + geom_density(aes(x=meltediris[meltediris$variable ==
"Petal.Width",]$value,
colour=meltediris[meltediris$variable == "Petal.Width",]$Species))
它选择熔化数据帧的选定子集的Species 值。再举一个例子,如果我这样做:
ggplot(meltediris) + geom_density(aes(x=meltediris[meltediris[meltediris$variable == "Petal.Width",]$Species == "virginica",]$value, colour=Species))
似乎 ggplot 应该只知道一个物种,因为我选择了非处女。当我这样做时,它只正确绘制了一个物种,但仍然在图例中显示另外两个 Species 值。它怎么知道这样做?我确信当我将它传递给x= 时,它无法读取剩余的数据帧值。
有人可以解释 ggplot 如何从融化的数据框中挑选这些变量吗?谢谢。
【问题讨论】:
-
您的代码没有子集也物种给出了长度不同的错误 - 所以它至少对我不起作用 - ggplot2 版本 0.9.3., x86_64-apple-darwin9.8.0/x86_64
-
它在这里工作 - 特别是哪一行你在执行时遇到了问题?
-
我在两个例子中都遇到了错误,你没有对 Species 进行子集化(只使用 colour=Species)。
-
我正在使用 Rstudio,但不确定是否可以解释其中的差异?