【问题标题】:ggplot2 0.9.0 automatically dropping unused factor levels from plot legend?ggplot2 0.9.0 自动从情节图例中删除未使用的因子水平?
【发布时间】:2012-04-03 22:55:17
【问题描述】:

我最近从 0.8.9 版升级到 ggplot2 0.9.0,现在我发现我的情节图例只显示情节中使用的因子水平(它省略了未使用的因子水平)。在它包含图例中的所有因子水平之前。我正在运行 Windows 7 和 R 2.15.0(今天之前的 2.14.2)。

还有人发现这个吗?有没有办法让未使用的因子水平显示在我的情节图例中?

library(ggplot2)

df <- data.frame(fruit = rep(c("apple", "orange"), times=11), 
                 year = 1990:2011, 
                 qty = rnorm(22, 100, 20))

# This plot only gives "apple" in the legend now.
# Before, I used to get both "apple" and "orange". 
qplot(year, qty, data = subset(df, fruit=="apple"), colour = fruit) 

传说中的 qplot() 曾经给我“苹果”和“橙色”(即使只有“苹果”的点)。现在我只得到了传说中的“苹果”。

出现此问题的原因 - 我正在制作许多数据集子集的图,并且我希望图例跨图标准化(通常我希望未使用的级别被自动删除并且不必键入 droplevels(),但是这个是我想要那些未使用的级别的一种情况)。如果这只是我的计算机本地的问题,我们深表歉意。


编辑:请注意,从 R 4.0.0 开始,上述代码不再产生 df$fruit 作为因素,这会改变下面问题和答案中 ggplot 的行为。重现使用:

df <- data.frame(
  fruit = factor(rep(c("apple", "orange"), times=11)), 
  year = 1990:2011, 
  qty = rnorm(22, 100, 20)
)

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    是的,您想将drop = FALSE 添加到您的色标中:

    ggplot(subset(df,fruit == "apple"),aes(x = year,y = qty,colour = fruit)) + 
        geom_point() + 
        scale_colour_discrete(drop = FALSE)
    

    【讨论】:

    • @ToddWest,这是因为data.frame 生成的示例数据用于将df$fruit 创建为factor,但现在(截至R 4.0.0)stringsAsFactors 默认为@ 987654327@ 所以它是一个字符向量。这不是与ggplot 相关的更改。
    • 谢谢,@Axeman。我对这个答案进行了澄清编辑。基本 3.6.2 的文档确实有 stringsAsFactors 默认为 TRUE,但至少在我的 R 4.1.1 安装中,stringsAsFactors 被重新配置为默认为 FALSE。我认为后者可能更像你的意思(这绝对不是我明确做出的改变)。
    • @ToddWest,是的,我的意思是 stringsAsFactors 已更改为 FALSE。我在之前的评论中说错了。为混乱道歉。
    【解决方案2】:

    第二种方法是使用limits 参数显式定义所需的条目:

    ggplot(subset(df,fruit == "apple"),aes(x = year,y = qty,colour = fruit)) + 
        geom_point() + 
        scale_colour_discrete(limits = c("apple", "orange"))
    

    【讨论】:

    • 由于某些原因,这适用于 scale_color_manual() 而 drop=FALSE 没有
    • 回答@zer0hedge 四年前的问题,drop = FALSE 是特定于因子水平的保留。因此,如果填充美学不是一个因素(例如,它是一个重复某些字符串或特定整数值的向量),那么设置 drop = FALSE 无效。相反,有必要列出所有这些“级别”作为限制(从 ggplot 3.3.5 开始)。
    猜你喜欢
    • 2017-04-09
    • 1970-01-01
    • 2012-07-09
    • 2022-01-28
    • 2017-05-09
    • 1970-01-01
    • 2021-08-17
    相关资源
    最近更新 更多