假设我使用ggplot2绘制iris
数据帧,如下所示:
meltediris <- melt(iris)
我现在可以通过从Petal.Width
列中选择它们来绘制variable
值:
ggplot(meltediris) + geom_density(aes(x=meltediris[meltediris$variable ==
"Petal.Width",]$value))
我想在Petal.Width
之后绘制Species
值,所以我做了:
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应该只知道一个物种,因为我选择了非virginicas。当我这样做时,它只能正确地绘制一个物种,但仍然在图例中显示另外两个Species
值。怎么知道这样做?我确信当我传递它x=
时,它无法读取剩余的数据帧值。
有人能解释ggplot如何从融化的数据帧中选择这些变量吗?感谢。
答案 0 :(得分:2)
就像在评论中说的那样,当我尝试这个时:
ggplot(meltediris) + geom_density(
aes(x=meltediris[meltediris$variable ==
"Petal.Width",]$value, colour=Species))
我收到此错误:
Error: Aesthetics must either be length one,
or the same length as the dataProblems:
meltediris[meltediris$variable == "Petal.Width", ]$value
如错误所示,您必须提供相同长度的 aes 。这里不需要给出data
参数,因为你给出了aes中的所有值(你的 aes 是向量)
例如,
X <- meltediris[meltediris$variable =="Petal.Width",]$value
Col <- meltediris[meltediris$variable == "Petal.Width",]$Species
ggplot() + geom_density(aes(x=X,colour=Col))
但是我最好在这种情况下将所有data.frame meltediris分组。
ggplot(meltediris) + geom_density(aes(x=variable,colour=Species),
subset=.(variable=="Petal.Width"))