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ąć.

Skarab
źródło
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

chl
źródło
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

zwiastun
źródło
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 ”.”

Colin D.
źródło