Jak utworzyć diagram słupkowy, w którym słupki są obok siebie w R


9

Chcę utworzyć bardiagram dla tych danych w R (odczytany z pliku CVS):

Experiment_Name MetricA MetricB Just_X 2 10 Just_X_i_Y 3 20

mieć następujący schemat:

alternatywny tekst

Jestem początkującym i nie wiem nawet, jak zacząć.


1
? Barplot czytanie pliku pomocy jest czasem szybsze niż publikowanie na forum ...
— RockScience 22.10.10

Najpierw musisz dowiedzieć się, że wykresy słupkowe są tworzone przez funkcję wykresu słupkowego ... nie jest to takie łatwe, jeśli o tym nie wiesz.

To nie daje odpowiedzi na pytanie. Aby skrytykować lub poprosić autora o wyjaśnienia, zostaw komentarz pod postem.
— kjetil b halvorsen

Odpowiedzi:


13

Zakładam, że jesteś w stanie zaimportować swoje dane do R za pomocą read.table()funkcji skrótów read.csv(). Następnie możesz zastosować dowolne funkcje podsumowania, na przykład tablelub mean, jak poniżej:

x <- replicate(4, rnorm(100))
apply(x, 2, mean)

lub

x <- replicate(2, sample(letters[1:2], 100, rep=T))
apply(x, 2, table)

Chodzi o to, aby otrzymać macierz lub tabelę wartości podsumowania, które chcesz wyświetlić.

Aby uzyskać wynik graficzny, spójrz na barplot()funkcję z opcją beside=TRUE, np

barplot(matrix(c(5,3,8,9),nr=2), beside=T, 
        col=c("aquamarine3","coral"), 
        names.arg=LETTERS[1:2])
legend("topleft", c("A","B"), pch=15, 
       col=c("aquamarine3","coral"), 
       bty="n")

spaceArgument może być używany, aby dodać dodatkową przestrzeń między sąsiednimi barów.

alternatywny tekst


13

Oto wersja ggplot:

library(ggplot2)
df = melt(data.frame(A=c(2, 10), B=c(3, 20), 
          experiment=c("X", "X & Y")),
          variable_name="metric")

ggplot(df, aes(experiment, value, fill=metric)) + 
       geom_bar(position="dodge")

alternatywny tekst


2
Mam nadzieję, że nie masz nic przeciwko, ale dodałem wyniki twoich poleceń.
— csgillespie

@csgillespie bez problemu :)
— teucer

1

Chciałem zaktualizować odpowiedź teucera, aby odzwierciedlić reshape2.

library(ggplot2)
library(reshape2)
df = melt(data.frame(A=c(2, 10), B=c(3, 20), 
                 experiment=c("X", "X & Y")),
      variable.name="metric")

ggplot(df, aes(experiment, value, fill=metric)) + 
  geom_bar(position="dodge",stat="identity")

Zauważ, że odpowiedź teucera powoduje błąd „Błąd w ewaluacji (wyrażenie, środowisko, załączniki): nie znaleziono metryki obiektu” przy reshape2, ponieważ reshape2 używa zmiennej.name zamiast zmiennej_nazwa.

Odkryłem również, że muszę dodać stat = "tożsamość" do funkcji geom_bar, ponieważ w przeciwnym razie dałoby to „Błąd: Mapowanie zmiennej do y, a także użycie stat =„ bin ”.”

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.