使用R中的熔化数据帧引用带有ggplot的元素

时间:2013-02-25 06:07:25

标签: r ggplot2 dataframe

假设我使用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如何从融化的数据帧中选择这些变量吗?感谢。

1 个答案:

答案 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"))