如何从ggplot2对象中提取图例标签? [英] How to extract the legend labels from a ggplot2 object?

查看:637
本文介绍了如何从ggplot2对象中提取图例标签?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我感兴趣的是将ggplot2对象的图例自动提取为表格(而不是图形对象)。我们来举个例子:

  p < -  ggplot(iris,aes(x = Sepal.Length,y = Petal。长度,颜色=物种))+ 
geom_point()
p



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



<$ p ($ g $ p









$ b $ 1#F8766D
51#00BA38
101#619CFF

但我也是对这些颜色对应于图例中的标签感兴趣,即我最感兴趣的是下表:

 颜色标签
#F8766D setosa
#00BA38 versicolor
#619CFF virginica


解决方案

可能是这样的:

 #获取问题中提到的颜色
#并且您可以获取关卡中的颜色从图的数据
data.frame(colors = unique(g $ data [[1]] [color]),
label = levels(g $ plot $ data [,g $ plot $标签$ color]))

输出:

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

更新:



如果存在 p < - p + scale_color_discrete (labels = c(sp1,sp2,sp3))然后你可以这样做:

  g  data.frame(colors = unique(g $ data [[1]] [color]),
label = g $ plot $ scale $ scales [[1]] $ labels)

输出:

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


I am interested in automatically extracting the legend of ggplot2 object as a table (not as a graphics object). Let's illustrate with an example:

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

Now there is a previous question, which shows how one can extract the colours used in the plot:

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

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

But I am also interested in the labels which those colours correspond to in the legend, i.e. the final result I would be interested in is the following table:

colour    label
#F8766D   setosa
#00BA38   versicolor
#619CFF   virginica

解决方案

Something like this maybe:

#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]))

Output:

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

Update:

If there is a p <- p + scale_color_discrete(labels=c("sp1","sp2","sp3")) then you could do:

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

Which outputs:

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

这篇关于如何从ggplot2对象中提取图例标签?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆