Come trama solo leggende ggplot2?

Attualmente sto lavorando con igraph e hanno colori etichettato il mio vertici. Vorrei aggiungere una legenda che Indica che ogni colore rappresenta.

Quello che posso pensare, a questo punto, è quello di utilizzare ggplot2 per stampare solo la leggenda e nascondere un grafico a barre.
C’è un modo per appena uscita la leggenda?

  • Oh sì, non ho visto che hai detto igraph. In base se non sbaglio e ggplot2 utilizza griglia, meglio fare il vostro proprio la leggenda, Gabor viene descritto di seguito. lui, ovviamente, di leggere più a fondo di quanto ho fatto.
InformationsquelleAutor Buthetleon | 2012-08-20



4 Replies
  1. 43

    Qui ci sono 2 approcci:

    Impostare Trama

    library(ggplot2) 
    library(grid)
    library(gridExtra) 
    
    my_hist <- ggplot(diamonds, aes(clarity, fill = cut)) + 
        geom_bar() 

    Cowplot approccio

    # Using the cowplot package
    legend <- cowplot::get_legend(my_hist)
    
    grid.newpage()
    grid.draw(legend)

    Come trama solo leggende ggplot2?

    Home grown approccio

    Spudoratamente rubato da: L’inserimento di un tavolo sotto la leggenda in un ggplot2 istogramma

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

    Creato il 2018-05-31 dal reprex pacchetto (v0.2.0).

    • anche se non è possibile modificare le dimensioni di entrambi leggenda e igraph oggetto utilizzando la funzione di visualizzazione
    • La mia leggenda ha enormi margini di che ottenere nel modo, dimentico qualcosa?
    • Hanno un occhiata a tema e modificare la trasparenza del legend. background. Se questo non aiuta, si prega di chiedere la tua domanda con un riproducibili esempio e il codice che stai cercando.
    • Vorrei raccomandare evidenziando il cowplot opzione è la più semplice ed efficace risposta.
  2. 18

    Cowplot comoda aggiunge una funzione per estrarre la leggenda. Il seguente è preso direttamente dal manuale.

    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. 3

    Ero codifica del colore, i vertici del grafico e volevo generare una leggenda, semplicemente , elegantemente e il più velocemente possibile.

    Il modo più veloce per fare questo ho creduto è generare la leggenda separatamente utilizzando ggplot2 prima di “incollare” la leggenda nella stessa trama come igraph utilizzando viewport e layout()

    In questo metodo non c’è bisogno di chiamare il rescale o asp argomentazioni in plot.igraph() funzione.

    Utilizzando il g_legend funzione di dati.telaio, leg, con 2 colonne, x essere il caso di vertice attributo e y è il colore esadecimale codice utilizzato nel mio igraph trama, ho fatto il seguente.

    Mio igraph oggetto è 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)

Lascia un commento