2013-01-18 1 views
7

Korzystam z załączonych danych poniżej, aby utworzyć boxplot. Datalink https://www.dropbox.com/s/dt1nxnkhq90nea4/GTAP_Sims.csvZachowaj tę samą kolejność, co w plikach danych, gdy używasz ggplot

Dotychczas Mam ten kod, który używam:

# Distribution of EV for all regions under the BASE scenario 

evBASE.f <- subset(ccwelfrsts, tradlib =="BASE") 
p <- ggplot(data = evBASE.f, aes(factor(region), ev)) 
p + geom_boxplot() + 
    theme(axis.text.x = element_text(colour = 'black', angle = 90, size = 16)) + 
    theme(axis.text.y = element_text(colour = 'black', size = 16)) 

odtwarza wykres, który wygląda: Plot file: /// C:/Użytkownicy/iouraich/Dokumenty /ggplot_Results.htm

To, czego szukam, to ustawienie osi X na wykresie w kolejności odpowiadającej nagłówkowi "region" w pliku csv.

Czy istnieje opcja w ggplot, która pozwala na kontrolę?

Thanks a lot

+0

Jest tu kilka problemów. Po pierwsze, nie widzimy, jakiego rodzaju działki chcesz osiągnąć, ponieważ link, który podałeś, jest plikiem w lokalnym systemie, a nie czymś w sieci. Po drugie, gdy podasz link do danych (dziękuję), dobrym pomysłem jest dołączenie kodu odczytującego dane, abyśmy mogli dokładnie odtworzyć twoje kroki. Po trzecie, tak, 'ggplot' może prawdopodobnie robić to, co chcesz. – SlowLearner

+0

@SlowLearner: thx za radę. Będę o tym pamiętać następnym razem, gdy poprosię o pomoc :) – iouraich

Odpowiedz

8

Zasadniczo wystarczy region <- factor(region,levels=unique(region)) określić poziomy w kolejności, w jakiej pojawiają się w danych.

Pełne rozwiązanie oparte na danych, pod warunkiem że:

ccwelfrsts <- read.csv("GTAP_Sims.csv") 
## unmangle data 
ccwelfrsts[5:8] <- sapply(ccwelfrsts[5:8],as.numeric) 
evBASE.f <- droplevels(subset(ccwelfrsts, tradlib =="BASE")) 
## reorder region levels 
evBASE.f <- transform(evBASE.f,region=factor(region,levels=unique(region))) 
library(ggplot2) 
theme_set(theme_bw()) 
p <- ggplot(data = evBASE.f, aes(region, ev)) 
p + geom_boxplot() + 
    theme(axis.text.x = element_text(colour = 'black', angle = 90, size = 16)) + 
    theme(axis.text.y = element_text(colour = 'black', size = 16))+ 
    xlab("") 

Można rozważyć włączenie orientację wykresu (poprzez coord_flip lub jawnie przełączania xiy mapowania oś), aby etykiety łatwiejsze do odczytania , chociaż układ z odpowiedzią numeryczną na osi Y jest bardziej znany większości widzów.

+0

Thx dużo. Dzięki temu łatwiej jest za każdym razem ręcznie określać kolejność wewnątrz aes(). – iouraich