Rysowanie wielu wykresów słupkowych na wykresie w R [zamknięte]

12

Chciałbym narysować cztery wykresy słupkowe na jednym wykresie w R. Użyłem następującego kodu. Tutaj, jak utrzymać legendę na wykresie, w szczególności legenda powinna zawierać od 2 do 3 wykresów słupkowych. Próbowałem też z, par(mar=c(4.1,4.1,8.1,4.1)ale nie ma sukcesu. Co więcej, próbowałem również uruchomić legend()po drugim wykresie słupkowym, ale nie ma sensu. Legenda dotyczy wszystkich czterech wykresów słupkowych. Proszę, pomóż mi w tym.

    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(...)
samarasa
źródło
1
Ktoś oznaczy to tagiem R
Brandon Bertelsen
@Kevin To jest poprawne pytanie tutaj; fakt, że R ma interfejs wiersza poleceń, nie oznacza, że ​​jakiekolwiek pytanie R jest kwestią programistyczną.
@Brandon Sure; możesz użyć sugerowanych zmian w przyszłości, zarobisz 2 powtórzenia za zaakceptowaną sugestię.

Odpowiedzi:

17

Odpowiedź doktora Mike'a jest dobra, ale pomyślałem, że dostarczę rozwiązania, które wykorzystają cechy facjalne (lub trellisingowe) ggplot2i lattice. Najpierw delikatnie przygotuj dane:

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

a następnie możemy wykonać następujące czynności ggplot2:

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

wprowadź opis zdjęcia tutaj

i używając lattice:

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

wprowadź opis zdjęcia tutaj

joran
źródło
@Brandon - To moja nowa misja. Te pytania są lepszymi odniesieniami dla innych, jeśli zawierają przykłady z bazy, ggplot2 i sieci.
joran
@Joran: Fantastycznie.
samarasa,
Jak zmienić nazwę etykiety na „factor (id)” w wersji ggplot?
News_is_Selection_Bias
11

Myślę, że najprostszym rozwiązaniem jest użycie nieodłącznych możliwości polecenia barplot, aby rozwiązać problem. Poniższy kod robi to, co interpretuję, co chcesz zrobić.

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

wątek

Mam nadzieję, że to odpowiada na twoje pytanie.

Dr Mike
źródło