2013-09-07 16 views
7

jak można obrócić etykiety osi x dla boxplot w r? Wiem który kod do wykorzystania, ale nie mogę zastosować go:r boxplot przechylone etykiety x oś

text(**????**, par("usr")[3] - 0.25, srt = 45, adj = 1, labels = labels, xpd = TRUE) 

Co zmienna idzie gdzie mam znaki zapytania? Stworzyłem ten wykres typu boxplot:

enter image description here

użyciu tego kodu:

soil=read.csv("soil_temp_boxplot.csv", header=TRUE, sep=";")  
tiff("soil_boxplot.tiff") 
par(mar=c(5.5,3.5,0.5,0.5)) 
labels<-paste(c("RB-GL830-[16]-10","RB-GL830-[16]-30", "SB-GL834-[11]-10","SB-GL834-[11]-30", "RB-GL843-[17]-10","RB-GL843-[17]-30","SB-GL864-[12]-10","SB-GL864-[12]-30","SB-GL989-[10]-30", "RB-F844-[18]-10", "RB-F844-[18]-30", "SBB-F-864-[14]-10","SB-F991-[13]-10", "SB-F991-[13]-30")) 
boxplot(soil$rb.gl.10.830.16, soil$rb.gl.30.830.16, soil$sb.gl.10.834.11, soil$sb.gl.30.834.11, soil$rb.gl.10.843.17, soil$rb.gl.30.843.17, soil$sb.gl.10.864.12, soil$sb.gl.30.864.12, soil$sb.gl.30.989.10, soil$rb.f.10.844.18, soil$rb.f.30.844.18, soil$sbb.f.10.864.14, soil$sb.f.10.991.13, soil$sb.f.30.991.13, yaxt="n", col=c("darkolivegreen1","darkolivegreen4","darkolivegreen1","darkolivegreen4","darkolivegreen1","darkolivegreen4","darkolivegreen1","darkolivegreen4","darkolivegreen1","burlywood2","burlywood4","burlywood2","burlywood2", "burlywood4")) 
axis(1, labels = TRUE) 
axis(2, c(0, 8, c(1, 2, 3, 4, 5,6,7)), las=1) 
text(labels, par("usr")[3] - 0.25, srt = 45, adj = 1, labels = labels, xpd = TRUE) 
mtext(2, text="Soil Temperature [°C]", line=2.2) 
mtext(1, text="Location", line=4.5) 
dev.off() 

Odpowiedz

10

Alternatywą po pierwotnej text wyrażenia:

par(mar=c(6, 4.1, 4.1, 2.1)) 

labels <- paste(c("RB-GL830-[16]-10", 
        "RB-GL830-[16]-30", 
        "SB-GL834-[11]-10", 
        "SB-GL834-[11]-30", 
        "RB-GL843-[17]-10", 
        "RB-GL843-[17]-30")) 

boxplot(count ~ spray, data = InsectSprays, 
     col = "lightgray", xaxt = "n", xlab = "") 

# x axis with ticks but without labels 
axis(1, labels = FALSE) 

# Plot x labs at default x position 
text(x = seq_along(labels), y = par("usr")[3] - 1, srt = 45, adj = 1, 
    labels = labels, xpd = TRUE) 

Dlaczego wykorzystać x = seq_along(labels) na stanowiskach etykiet? x w text jest wektorem współrzędnych gdzie umieścić etykiety. Jeśli spojrzysz na ?boxplot, zobaczysz, że argument at to "wektor liczbowy podający lokalizacje, w których powinny zostać narysowane pola [...], domyślnie 1: n, gdzie n to liczba pól." Ponieważ nie podano argumentu at w wywołaniu boxplot, zostanie użyte domyślne "1: n pozycji". Liczba skrzynek to oczywiście liczba poziomów twojej zmiennej objaśniającej, którą @Josh O'Brien użył w swojej odpowiedzi. Aby pokazać ci alternatywę, użyłem Twojego niestandardowego wektora etykiety (które oczywiście musi mieć taką samą długość, jak liczba poziomów czynników). seq_along generuje regularną sekwencję od 1 do length argumentu, co odpowiada pozycjom "defaults to 1: n" at.

Uwaga dodatkowa: dane wydają się mieć "szeroki" format. W wielu przypadkach w R wygodniej jest mieć dane w "długim" formacie. W funkcji plot wystarczy określić zmienną x (np. Położenie) i y (np. Temp gleby), zamiast określać dane dla każdego poziomu x. enter image description here

+0

Dzięki Henrik! wypracowane perfekcyjnie – samjam

+0

Wspaniale słyszeć to @samjam! Zobacz moją małą notatkę dotyczącą formatu danych w mojej zaktualizowanej odpowiedzi. – Henrik

2

Spójrz na funkcję staxlab w pakiecie plotrix, czyni to (i alternatywą) całkiem prosto do przodu.

+0

@ Henrik, uważam, że moja odpowiedź odnosi się do "głównego problemu" PO, ale nie zgadzam się, że główny problem jest taki sam, jak konkretne pytanie, jak określić współrzędne x etykiet (które przyznaję odpowiedź nie jest adresowana). Piękno takiego forum jest takie, że wiele odpowiedzi może odpowiedzieć na główne pytanie, jak również na domniemane i inne powiązane pytania, które mogą być interesujące dla OP i przyszłych poszukiwaczy. Nie patrzę też na zegarek i nie mówię "tak", gdy pytam "czy wiesz, która jest godzina?". –