【问题标题】:referring to elements with ggplot using melted dataframes in R在 R 中使用融化的数据框引用带有 ggplot 的元素
【发布时间】: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,但不确定是否可以解释其中的差异?

标签: r ggplot2 dataframe


【解决方案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-12
    • 2021-08-22
    • 2014-05-12
    • 2017-03-30
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多