Как построить только легенды в ggplot2?
В настоящее время я работаю с igraph и имеет цвет, обозначенный моими вершинами. Я хотел бы добавить легенду, указывающую, что представляет каждый цвет.
На данный момент я могу подумать о том, чтобы использовать ggplot2 для печати только легенды и скрыть график штрихов.
Есть ли способ вывести легенду?
Ответы
Ответ 1
Бесстыдно украден из: Вставка таблицы под легендой в гистограмме ggplot2
library(ggplot2); library(gridExtra); library(grid)
my_hist<-ggplot(diamonds, aes(clarity, fill=cut)) + geom_bar()
#create inset table
my_table<- tableGrob(head(diamonds)[,1:3],
gpar.coretext =gpar(fontsize=8), gpar.coltext=gpar(fontsize=8),
gpar.rowtext=gpar(fontsize=8))
#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)
grid.draw(legend)
Ответ 2
Cowplot удобно добавляет функцию для извлечения легенды. Ниже приводятся данные из руководства.
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)))
Ответ 3
Я был цветом, кодирующим вершины на графике, и хотел генерировать легенду как просто, элегантно и как можно быстрее.
Самый быстрый способ сделать это Я пришел к выводу, что генерировать легенду отдельно, используя ggplot2, прежде чем "вставить" легенду в тот же сюжет, что и igraph, используя viewport
и layout()
В этом методе нет необходимости вызывать аргументы rescale
или asp
в plot.igraph()
.
Используя функцию g_legend на data.frame, leg
, с двумя столбцами, x является соответствующим атрибутом вершины, а y является шестнадцатеричным цветовым кодом, используемым в моем графике графика, я сделал следующее.
Мой объект 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)