Disegno di più grafici a barre su un grafico in R [chiuso]


12

Vorrei tracciare quattro grafici a barre su un singolo grafico in R. Ho usato il seguente codice. Qui, come mantenere una legenda in cima al grafico, in particolare la legenda dovrebbe essere tra 2 e 3 grafici a barre. Ho anche provato con par(mar=c(4.1,4.1,8.1,4.1)ma non c'è successo. Inoltre, ho anche provato a correre legend()dopo il secondo grafico a barre, ma non serve a niente. La leggenda è per tutti e quattro i grafici a barre. Per favore, aiutatemi in questo.

    par(mfrow=c(1,4))
    barplot(t(A), beside=T, ylim=c(-100,100),..)
    barplot(t(B), beside=T, ylim=c(-100,100),..)
    barplot(t(C), beside=T, ylim=c(-100,100),..)
    barplot(t(D), beside=T, ylim=c(-100,100),..)
    legend(...)

1
Qualcuno tagga questo con R
Brandon Bertelsen l'

@Kevin Questa è una Q valida qui; il fatto che R abbia un'interfaccia a riga di comando non significa che qualsiasi domanda R sia di programmazione.

@Brandon Sure; puoi utilizzare le modifiche suggerite in futuro, guadagneresti anche 2 ripetizioni per i suggerimenti accettati.

Risposte:


17

La risposta del Dr. Mike è buona, ma ho pensato di fornire soluzioni che sfruttassero le caratteristiche di sfaccettatura (o trellising) di ggplot2e lattice. Prima prepara leggermente i dati:

mydata$id <- 1:nrow(mydata)
dat <- melt(mydata,id.vars = "id")

e quindi possiamo effettuare quanto segue in ggplot2:

ggplot(dat,aes(x=factor(id), y = value)) + 
    facet_wrap(~variable) +
    geom_bar(aes(fill = factor(id)))

inserisci qui la descrizione dell'immagine

e usando lattice:

barchart(~value|variable,group = factor(id),data=dat,
         key = simpleKey(text = as.character(1:5),
                rectangles = TRUE,points = FALSE,space = "right"))

inserisci qui la descrizione dell'immagine


@Brandon - È la mia nuova missione. Queste domande sono riferimenti migliori per gli altri se contengono esempi da base, ggplot2 e reticolo.
joran,

@Joran: fantastico.
samarasa,

Come rinominare l'etichetta su "factor (id)" nella versione ggplot?
News_is_Selection_Bias

11

Penso che la soluzione più semplice sia usare le capacità intrinseche del comando barplot per risolvere il tuo problema. Il codice seguente fa quello che interpreto che tu voglia fare.

mydata <- data.frame(Barplot1=rbinom(5,16,0.6), Barplot2=rbinom(5,16,0.25),
                     Barplot3=rbinom(5,5,0.25), Barplot4=rbinom(5,16,0.7))
barplot(as.matrix(mydata), main="Interesting", ylab="Total", beside=TRUE, 
        col=terrain.colors(5))
legend(13, 12, c("Label1","Label2","Label3","Label4","Label5"), cex=0.6, 
       fill=terrain.colors(5))

tracciare

Spero che questo risponda alla tua domanda.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.