【问题标题】:Error in extracting legend labels from ggplot_build object从 ggplot_build 对象中提取图例标签时出错
【发布时间】:2017-07-13 12:45:39
【问题描述】:

我想提取分配给数据点 (X,Y) 的标签和颜色。我尝试使用this solution 中提到的方法提取它们。

head(dataPlot)
# Source: local data frame [6 x 3]
# Groups: EFOValue [2]
# 
# # A tibble: 6 x 3
#          X        Y       EFOValue
#      <dbl>    <dbl>          <chr>
# 1 0.505115 0.348486 adipose tissue
# 2 0.365520 0.414446 adipose tissue
# 3 0.365520 0.414446 adipose tissue
# 4 0.526531 0.341508  adrenal gland
# 5 0.526531 0.341508  adrenal gland
# 6 0.412384 0.385316  adrenal gland


p2 <- ggplot(dataPlot, aes(x=X, y=Y, color=EFOValue)) + geom_point()
g2 <- ggplot_build(p2)
data.frame(colours = unique(g2$data[[1]]["colour"]), 
           label = levels(g2$plot$data[, g2$plot$labels$colour])

示例代码在示例数据集iris 上按预期工作。 对于此数据集dataPlot,输出图与预期一致。

但是,我注意到 g2$plotg2 对象中为空,因此无法提取值。请告知这可能是什么原因以及如何克服这种 ggplot 方法中的错误?是否有任何其他替代方法可以做到这一点:通过为每个级别分配颜色将颜色传递给绘图系统。

【问题讨论】:

  • 您能否举个例子,因为使用的是 iris 数据集,并且您的链接中的答案给出了预期的结果
  • 啊……它不适用于小标题。将数据转换为数据框或使用label = levels(g$plot$data[[g$plot$labels$colour]])
  • 它也不适用于数据框。
  • 对我有用,所以请您添加一个示例 - 比如说使用 iris 数据集
  • praddep - 你能分享一些数据吗? ps 我添加了一个使用 iris 数据集作为 tibble 的示例,然后在 r 聊天站点转换为数据框。 chat.stackoverflow.com/rooms/25312/r-public

标签: r ggplot2 colors


【解决方案1】:

根据版主的要求将其作为答案发布,以便未来的用户可以从答案中受益。


我找到了问题。问题是用于着色的变量EFOValue 不是因子变量。因此,levels() 函数会产生一个空槽(或没有所需的输出)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多