Pytanie w sprawie boxplot, label, r – R - boxplot z wieloma etykietami czynnikowymi

7

Pracuję nad próbą stworzenia boxplota w R-cran, który jest podzielony na dwa różne czynniki na osi x. Mój problem polega na tworzeniu etykiet dla jednego czynnika z poziomami +20, które odpowiednio rozciągają cały wykres, używając legendy do oznaczenia drugiego czynnika, który ma tylko 2 do 3 poziomów.

Oto skrypt testowy, który z grubsza naśladuje mój rzeczywisty zestaw danych:

<code>d<-data.frame(x=rnorm(1500),f1=rep(seq(1:20),75),f2=rep(letters[1:3],500))
# first factor has 20+ levels
d$f1<-factor(d$f1)
# second factor a,b,c
d$f2<-factor(d$f2)

boxplot(x~f2*f1,data=d,col=c("red","blue","green"),frame.plot=TRUE,axes=FALSE)

# y axis is numeric and works fine
yts=pretty(d$x,n=5)
axis(2,yts)

# I know this doesn't work; what I'd like is to spread the factors out 
# so the each group of three(a,b,c) is labeled correctly
axis(1,at=seq(1:20))

# Use the legend to handle the f2 factor labels
legend(1, max(d$x), c("a", "b","c"),fill = c("red", "blue","green"))
</code>

Dzięki za pomoc

Twoja odpowiedź

2   odpowiedź
13

FWIW, aggplot2 rozwiązanie:

<code>library(ggplot2)
ggplot(data = d, aes(x = f1, y = x)) + 
  geom_boxplot(aes(fill = f2), width = 0.8) + theme_bw()
</code>

Nigdy nie zdawałem sobie sprawy z tego, że mógłbyś motywowaćggplot działki! Zawsze byłem z nich wyłączony z powodu brzydkiego szarego tła. Dzięki, że mi to pokazałeś. thelatemail
@thelatemail, theme pozwala na dostosowanie / modyfikację prawie każdego elementu na wykresie. Sandy Muspratt
@thelatemail - patrztutaj przegląd tematów. Chase
5

Jeśli chcesz etykietę na środku każdej grupy 3 pól, spróbuj czegoś takiego:

<code>axis(1,at=seq(2,60,3),labels=1:20,cex.axis=0.7)
</code>

Aby uogólnić, byłoby to:

<code>groups <- 20
numbox <- 3
total <- groups * numbox
xpoints <- seq(median(1:numbox),total,numbox)
</code>
@Kerry - Bez obaw! W takim przypadku nie zapomnij podać nam zarówno upvote (strzałka w górę), jak i wybrać odpowiedź (symbol zaznaczenia poniżej strzałek) thelatemail
Dzięki wam obojgu, dokładnie to, czego szukałem. Kerry

Powiązane pytania