2013-01-18 2 views
7

Sto utilizzando i dati allegati di seguito per produrre il boxplot. Datalink https://www.dropbox.com/s/dt1nxnkhq90nea4/GTAP_Sims.csvMantieni lo stesso ordine dei file di dati quando si utilizza ggplot

Finora, ho questo codice che sto usando:

# 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)) 

riproduce una trama che sembra: Trama file: /// C:/Users/iouraich/Documenti /ggplot_Results.htm

Quello che sto cercando qui è che l'asse x nel diagramma corrisponda all'ordine dell'intestazione "regione" nel file csv.

C'è qualche opzione in ggplot che consente di controllare per quello?

Grazie mille

+0

Qui ci sono alcuni problemi. Innanzitutto, non possiamo vedere che tipo di trama stai cercando perché il link che hai fornito è un file sul tuo sistema locale, non su qualcosa sulla rete. In secondo luogo, mentre hai fornito un collegamento ai dati (grazie), è una buona idea includere il codice che legge i dati in modo che possiamo riprodurre esattamente i tuoi passi. Terzo, sì, 'ggplot' può probabilmente fare ciò che vuoi. – SlowLearner

+0

@SlowLearner: grazie per il consiglio. Lo terrò a mente la prossima volta chiedo aiuto :) – iouraich

risposta

8

Fondamentalmente è solo bisogno region <- factor(region,levels=unique(region)) per specificare i livelli nell'ordine in cui appaiono nei dati.

Una soluzione completa sulla base dei dati che hai fornito:

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("") 

Si potrebbe prendere in considerazione il passaggio l'orientamento del grafico (tramite coord_flip o passando esplicitamente x e mappature asse Y) per rendere le etichette più facile da leggere , sebbene il layout con la risposta numerica sull'asse y sia più familiare alla maggior parte degli spettatori.

+0

Thx molto. Questo rende più semplice invece di ogni volta specificare manualmente l'ordine all'interno di aes(). – iouraich