50

私は現在igraphを使用しており、頂点に色のラベルを付けています。各色が何を表すかを示す凡例を追加したいと思います。

この時点で私が考えることができるのは、ggplot2を使用して凡例のみを印刷し、棒グラフを非表示にすることです。凡例を出力する方法はありますか?

4

4 に答える 4

72

2つのアプローチがあります:

プロットを設定する

library(ggplot2) 
library(grid)
library(gridExtra) 

my_hist <- ggplot(diamonds, aes(clarity, fill = cut)) + 
    geom_bar() 

カウプロットアプローチ

# Using the cowplot package
legend <- cowplot::get_legend(my_hist)

grid.newpage()
grid.draw(legend)

自家製のアプローチ

恥知らずに盗まれた:ggplot2ヒストグラムの凡例の下にテーブルを挿入する

## Function to extract legend
g_legend <- function(a.gplot){ 
    tmp <- ggplot_gtable(ggplot_build(a.gplot)) 
    leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box") 
    legend <- tmp$grobs[[leg]] 
    legend
} 

legend <- g_legend(my_hist) 

grid.newpage()
grid.draw(legend) 

reprexパッケージ(v0.2.0)によって2018-05-31に作成されました。

于 2012-08-20T16:52:02.233 に答える
27

カウプロットは、凡例を抽出する機能を手軽に追加します。以下は、マニュアルから直接引用したものです。

library(ggplot2)
library(cowplot)
p1 <- ggplot(mtcars, aes(mpg, disp)) + geom_line()
plot.mpg <- ggplot(mpg, aes(x = cty, y = hwy, colour = factor(cyl))) + geom_point(size=2.5)

# Note that these cannot be aligned vertically due to the legend in the plot.mpg
ggdraw(plot_grid(p1, plot.mpg, ncol=1, align='v'))

# now extract the legend
legend <- get_legend(plot.mpg)

# and replot suppressing the legend
plot.mpg <- plot.mpg + theme(legend.position='none')

# Now plots are aligned vertically with the legend to the right
ggdraw(plot_grid(plot_grid(p1, plot.mpg, ncol=1, align='v'),
                 plot_grid(NULL, legend, ncol=1),
                 rel_widths=c(1, 0.2)))
于 2017-05-31T09:25:27.593 に答える
15

私はggpubrパッケージを使用しました-それは非常に簡単です!

https://rpkgs.datanovia.com/ggpubr/reference/get_legend.html

# Extract the legend. Returns a gtable
leg <- get_legend(p)

# Convert to a ggplot and print
as_ggplot(leg)
于 2019-05-30T09:44:59.100 に答える
3

私はグラフの頂点を色分けしていて、できるだけ簡単に、エレガントに、そしてできるだけ早く凡例を生成したいと思っていました。

これを行うための最速の方法は、ggplot2を使用して凡例を個別に生成してから、とを使用してigraphと同じプロットに凡例を「貼り付ける」ことですviewportlayout()

このメソッドでは、関数内のrescaleまたはasp引数を呼び出す必要はありませんplot.igraph()

2列のdata.frameでg_legend関数を使用してleg、xは適切な頂点属性であり、yは私のigraphプロットで使用される16進カラーコードであり、次のことを行いました。

私のigraphオブジェクトはt8g

legend <- g_legend(leg)
vpleg <- viewport(width = 0.1, height = 0.1, x=0.85,y=0.5)
layout(matrix(c(1,2),1,2,byrow=T),widths=c(3,1))
plot(t8g,edge.width=1,edge.arrow.size=0.1,vertex.label.cex=0.2,main="b2_top10")
pushViewport(vpleg)
grid.draw(legend)
于 2012-08-28T05:12:55.933 に答える