/ / Tworzenie zgrupowanego wykresu słupkowego danych wielokolumnowych w R - r, ggplot2

Tworzenie pogrupowanego wykresu słupkowego danych z wieloma kolumnami w R - r, ggplot2

Mam następujące dane

       Input Rtime Rcost Rsolutions  Btime Bcost
1   12 proc.     1    36     614425     40    36
2   15 proc.     1    51     534037     50    51
3    18-proc     5    62    1843820     66    66
4    20-proc     4    68    1645581 104400    73
5 20-proc(l)     4    64    1658509  14400    65
6    21-proc    10    78    3923623 453600    82

Chcę utworzyć zgrupowany wykres słupkowy na podstawie tych danych, który zawiera oś x Input pole (jako grupy) i oś y reprezentują skalę logu dla pól Rtime i Btime (dwa słupki).

Wszystkie rozwiązania / przykłady, które sprawdziłem online, miałypodobne dane umieszczone w układzie trzech kolumn. Nie wiem, jak korzystać z danych, muszę wygenerować zgrupowany wykres słupkowy. Lub jeśli istnieje sposób na konwersję tych danych (ręczne konwertowanie nie jest opcją, ponieważ jest to ogromny plik z dużą ilością wierszy) w plik R i ggplot zgodny format danych.

Edytować :

Wykres wygenerowany przy użyciu rozwiązania gncs

wprowadź opis obrazu tutaj

Odpowiedzi:

22 dla odpowiedzi nr 1

Zgodnie z życzeniem: ggplot2 rozwiązanie, które również wykorzystuje reshape2:

library(reshape2)

df <- read.table(text = "       Input Rtime Rcost Rsolutions  Btime Bcost
1   12-proc.     1    36     614425     40    36
2   15-proc.     1    51     534037     50    51
3    18-proc     5    62    1843820     66    66
4    20-proc     4    68    1645581 104400    73
5 20-proc(l)     4    64    1658509  14400    65
6    21-proc    10    78    3923623 453600    82",header = TRUE,sep = "")

dfm <- melt(df[,c("Input","Rtime","Btime")],id.vars = 1)

ggplot(dfm,aes(x = Input,y = value)) +
geom_bar(aes(fill = variable),stat = "identity",position = "dodge") +
scale_y_log10()

wprowadź opis obrazu tutaj

Zwróć uwagę na różnicę stylu tutaj, skąd log(1) = 0, ggplot2 traktuje to jako słupek o zerowej wysokości i niczego nie kreśli, podczas gdy barplot rysuje mały skrót (co moim zdaniem jest trochę mylące).


5 dla odpowiedzi nr 2

Myślę, że rozumiem problem i to właśnie sugerowałbym (krótka seria - opcja):

data <- read.table("data.txt", header=TRUE)
subset <- t(data.frame(data$Rtime, data$Btime))
barplot(subset, legend = c("Rtime", "Btime"), names.arg=data$Input, log="y", beside=TRUE)

Czy tego chcesz? To trochę brudne, ale to działa.

Aktualizacja: poprawiony kod.


3 dla odpowiedzi nr 3

Odpowiedź jorana bardzo mi pomogła, ale musiałem skorzystać stat = "tożsamość" w takiej instrukcji ggplot:

ggplot(dfm, aes(x = Input,y = value)) +
geom_bar(aes(fill = variable), position = "dodge", stat="identity") +
scale_y_log10()

Moja wersja R to 3.2.2, a ggplot2 wersja 1.0.1

Dzięki.