1

假设我iris使用 ggplot2 将数据框熔化如下:

meltediris <- melt(iris)

我现在可以Petal.Width通过从variable列中选择它们来绘制值:

ggplot(meltediris) + geom_density(aes(x=meltediris[meltediris$variable == 
                                                          "Petal.Width",]$value))

然后我想通过 绘制Petal.WidthSpecies,所以我做了:

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 如何从融化的数据框中挑选这些变量吗?谢谢。

4

1 回答 1

1

就像评论中所说的那样,当我尝试这个时:

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 都设置为子集。

ggplot(meltediris) + geom_density(aes(x=variable,colour=Species),
               subset=.(variable=="Petal.Width"))
于 2013-02-25T06:40:19.423 回答