Como traçar apenas as lendas no ggplot2?

Atualmente estou trabalhando com o igraph e tenho colors marcadas com meus vértices. Eu gostaria de adicionar uma legenda Indicando o que cada cor representa.

O que eu posso pensar neste ponto é usar o ggplot2 para imprimir apenas a legenda e ocultar uma barra de plotagem. Existe uma maneira de apenas produzir a legenda?

Furiosamente roubado de: Inserir uma tabela sob a legenda em um histograma ggplot2

library(ggplot2) library(grid) library(gridExtra) my_hist <- ggplot(diamonds, aes(clarity, fill = cut)) + geom_bar() # create inset table my_table <- tableGrob(head(diamonds)[, 1:3]) # 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]] return(legend)} legend <- g_legend(my_hist) # or use cowplot package # legend <- cowplot::get_legend(my_hist) grid.newpage() grid.draw(legend) 

Criado em 2018-05-31 pelo pacote reprex (v0.2.0).

O Cowplot adiciona facilmente uma function para extrair a legenda. O seguinte é retirado diretamente do manual.

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

Eu estava codificando em colors os vértices no gráfico e queria gerar uma legenda da maneira mais simples, elegante e rápida possível.

A maneira mais rápida de fazer isso, acredito que é gerar a legenda separadamente usando ggplot2 antes de “colar” a legenda no mesmo gráfico que o igraph usando viewport e layout()

Nesse método, não há necessidade de chamar os argumentos de rescale ou asp na function plot.igraph() .

Usando a function g_legend em um data.frame, leg , com 2 colunas, sendo x o atributo de vértice apropriado ey sendo o código de cor hexadecimal usado em meu gráfico de igrícula, fiz o seguinte.

Meu object t8g é 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)