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
Odpowiedzi:
22 dla odpowiedzi nr 1Zgodnie 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()
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.