Comment tracer juste les légendes dans ggplot2?
je travaille actuellement avec igraph et j'ai des vertices de couleur. Je voudrais ajouter une légende Indiquant ce que chaque couleur représente.
ce que je peux penser à ce stade est d'utiliser ggplot2 pour imprimer seulement la légende et cacher un tracé en barre. Y a-t-il un moyen de simplement afficher la légende?
3 réponses
Hontlessly stolen from: insérant une table sous la légende dans un histogramme 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)
créé le 2018-05-31 par le reprex package (v0.2.0).
Cowplot handily ajoute une fonction pour extraire la légende. Ce qui suit est tiré directement du manuel.
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)))
j'étais en train de coder les sommets du graphe et je voulais générer une légende aussi simplement , aussi élégamment et aussi vite que possible.
la façon la plus rapide de faire cela, je suis venu à croire est de générer la légende séparément en utilisant ggplot2 avant de "coller" la légende dans le même tracé que iggraph en utilisant viewport
et layout()
dans cette méthode, il n'est pas nécessaire d'appeler les arguments rescale
ou asp
dans le plot.igraph()
fonction.
utilisant la fonction g_legend sur une donnée.cadre, leg
, avec 2 colonnes, x étant l'attribut de vertex approprié et y étant le code de couleur hexadécimal utilisé dans mon graphique, j'ai fait ce qui suit.
mon objet graphique est 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)