2013-06-06 5 views
27

Walczyłem o zamówienie i wykreślić prostą ramkę danych jako wykres słupkowy w ggplot2.Dane wydruku w porządku malejącym, jak pokazano w ramce danych

Chcę narysować dane w takiej postaci, w jakiej się pojawiają, aby wartości (zmienna "zliczanie") dla odpowiednich kategorii (np. "Ludzie", "mężczyzna") były rysowane od wysokiego do niskiego. Śledziłem inne wątki na tej stronie, zadając podobne pytania, ale nie mogę tego uruchomić!

## Dataset (mesh2) 

#Category     Count 

#Humans    62 

#Male    40 

#Female    38 

#Adult    37 

#Middle Aged   30 

#Liver/anatomy & histology   29 

#Organ Size     29 

#Adolescent     28 

#Child    21 

#Liver/radiography*    20 

#Liver Transplantation*  20 

#Tomography, X-Ray Computed   20 

#Body Weight   18 

#Child, Preschool    18 

#Living Donors*   18 

#Infant    16 

#Aged    14 

#Body Surface Area    14 

#Regression Analysis  11 

#Hepatectomy   10 

## read in data (mesh2) as object (mesh2) 

mesh2 <- read.csv("mesh2.csv", header = T) 

## order data by count of mesh variable 

mesh2$cat2 <- order(mesh2$Category, mesh2$Count, decreasing=TRUE) 

## Barplot created in ggplot2 

library(ggplot2) 

mesh2p <- ggplot(mesh2, aes(x=cat2, y=Count)) + geom_bar (stat="identity") +  scale_x_continuous(breaks=c(1:20), labels=c("Humans", "Male", "Female", "Adult", "MAged", "Liver anat & hist", "Organ Size", "Adolescent", "Child", "Liver radiog", "Liver Transplnt", "Tomog X-Ray Computed", "Body Weight", "Child Preschool", "Living Donors", "Infant", "Aged", "BSA", "Regression Analysis", "Hepatectomy"))+ theme (axis.text.x=element_text(angle=45, hjust=1)) 

Wygląda na to, że nie mogę publikować wyników, ponieważ nie mam wystarczającej "reputacji"?

+1

Spraw, aby Twoja kategoria była uporządkowanym czynnikiem. Zobacz '? Factor', aby dowiedzieć się, jak to zrobić. – Roland

+1

@Roland Nie, to jest * nie * jak to zrobić ogólnie. Co to jest domyślne porządkowanie w zbiorze 'c (" człowiek "," mężczyzna "," kobieta "," kot ")'? Rozkazany czynnik dotyczy danych, w których poziomy * same * przekazują pewne informacje ilościowe, np. Zbiór "c (" mokry "," wilgotny "," suchy ")". Dlaczego twój błąd w tym jest przechowywanie tych danych, ponieważ uporządkowany czynnik zrobi coś złego, jeśli jest używany w modelu w R (wielomianowe ograniczenia) dla nieuporządkowanych danych. Potrzebna jest funkcja 'reorder()'. –

+1

s/twoje/jesteś/palce ... –

Odpowiedz

97

Chcesz reorder(). Oto przykład z danych fikcyjnych

set.seed(42) 
df <- data.frame(Category = sample(LETTERS), Count = rpois(26, 6)) 

require("ggplot2") 

p1 <- ggplot(df, aes(x = Category, y = Count)) + 
     geom_bar(stat = "identity") 

p2 <- ggplot(df, aes(x = reorder(Category, -Count), y = Count)) + 
     geom_bar(stat = "identity") 

require("gridExtra") 
grid.arrange(arrangeGrob(p1, p2)) 

Nadanie:

enter image description here

Zastosowanie reorder(Category, Count) mieć Category zamówionych z niskiej wysokości.

+1

Cześć Gavin. Dzięki v.much za to. Właśnie się zalogowałem, spędziłem ostatnią godzinę próbując znaleźć rozwiązanie, a także wymyśliłem rozwiązanie, które prezentujesz! Niemniej jednak, twoje wyjaśnienie poziomów przekazywania informacji ilościowych i właściwe użycie funkcji współczynnika lub kolejki jest naprawdę pomocne. Dzięki jeszcze raz. –

+0

Nie mogę zrozumieć, dlaczego to nie zadziała, jeśli w danym przypadku masz więcej niż jedno wypełnienie. – JHo

+0

Myślę, że twój kod nie będzie działał z wartościami ujemnymi, zobacz http://dpaste.com/0Y5T182 W takim przypadku twój wykres nie będzie w porządku malejącym po wykreśleniu. Tutaj także kod 'dat.m <- structure (lista (Date = c (" 1.5.2017 "," 1.3.2017 "," 1.5.2017 "," 1.3.2017 "), zmienna = struktura (c (1L, 1L, 2L, 2L), .Label = c ("Total", "Area"), class = "factor"), value = c (110, -90, 700, 880)), row.names = c (NA , -4L), .Names = c ("Date", "variable", "value"), class = "data.frame"); biblioteka (ggplot2); ggplot (dat.m, aes (x = ponowne zamówienie (data, -wartość), y = wartość, wypełnienie = zmienna)) + geom_bar (stat = "tożsamość") '. –