如何从ggplot2对象中提取图例标签?

时间:2015-11-25 21:51:59

标签: r ggplot2

我有兴趣自动提取ggplot2对象的图例作为表(而不是图形对象)。让我们用一个例子来说明:

value

iris example

现在有一个previous question,它显示了如何提取绘图中使用的颜色:

p <- ggplot(iris, aes(x=Sepal.Length, y= Petal.Length, color=Species)) +
       geom_point()
p

但我也对这些颜色在图例中对应的标签感兴趣,即我感兴趣的最终结果如下表所示:

 g <- ggplot_build(p)
 unique(g$data[[1]]["colour"])

      colour
 1   #F8766D
 51  #00BA38
 101 #619CFF

2 个答案:

答案 0 :(得分:4)

这样的事情可能是:

#get the colours as mentioned in your question
#and you could get the levels from the plot's data
data.frame(colours = unique(g$data[[1]]["colour"]), 
             label = levels(g$plot$data[, g$plot$labels$colour]))

输出:

     colour      label
1   #F8766D     setosa
51  #00BA38 versicolor
101 #619CFF  virginica

更新

如果有p <- p + scale_color_discrete(labels=c("sp1","sp2","sp3")),那么你可以这样做:

g <- ggplot_build(p)
data.frame(colours = unique(g$data[[1]]["colour"]), 
             label = g$plot$scales$scales[[1]]$labels)

哪个输出:

     colour label
1   #F8766D   sp1
51  #00BA38   sp2
101 #619CFF   sp3

答案 1 :(得分:0)

欢迎来到 2021 年!

在 ggplot 3.3.3 版本中,我们可以这样做:

g <- ggplot_build(p)
data.frame(colours = unique(g$data[[1]]["colour"]),
             label = gb$plot$scales$scales[[4]]$get_labels()) 

隐藏在对象中的 get_labels() 函数为您提供颜色的相应标签。我相信第三行的神奇 '[[4]]' 是因为我的情节也有 x、y、形状和色标。