2009-09-08 4 views
5

Próbuję podzielić etykiety osi X na dwie linie. Chciałbym również obrócić etykiety o 45 stopni. Jak mogę to zrobić?Czy można rozdzielić etykiety osi na 2 linie w podstawowej grafice?

Co mam tak daleko:

N <- 10 
dnow <- data.frame(x=1:N, y=runif(N), labels=paste("This is observation ",1:N)) 
with(dnow, plot(x,y, xaxt="n", xlab="")) 
atn <- seq(1,N,3) 
axis(1, at=atn, labels=labels[atn]) 
+0

Co masz na myśli 2 linie? Czy masz na myśli, że chcesz "To jest \ n obserwacja ..."? –

+0

@chis_dubois To pierwsza część odpowiedzi! Dzięki! –

Odpowiedz

12

Oto jedna możliwość z pakietem ggplot2.

N <- 10 
labs <- factor(1:N,labels=paste("This is \n observation",1:N)) 
dnow <- data.frame(x=1:N, y=runif(N), labels=labs) 
qplot(labels,y,data=dnow) + 
     opts(axis.text.x=theme_text(angle=-45,hjust=0)) 

alt text http://i28.tinypic.com/k024p3.png

Czekam na spotkanie z przykładów pakiet podstawowy, też!

+0

@chris - Chciałbym przyjąć twoje pytanie (wszystkie fajne dzieci używają ggplot2 w tych dniach). Ale czy mógłbyś ustalić oś x przed rozdaniem (ggplot porządkuje wektory alfabetycznie, więc musisz przekonwertować je na współczynnik.) Dzięki! –

+0

Dobra sugestia. Zmieniłem to na czynnik, ale prawa strona wciąż jest odcięta. Spróbuję to naprawić. –

+0

działa to również w przypadku etykiet danych - jeśli wrzucisz \ n do nich, przerwie to linie! – Andrew

4

To właśnie ugotował (przed moim ggplot2 dni) przy użyciu grafiki Base:

## data 
N <- 10 
dnow <- data.frame(x=1:N, y=runif(N), labels=paste("This is \nobservation ",1:N)) 
## make margins wide 
par(mfrow=c(1,1), mar=c(10,10,6,4)) 
## plot without axix labels or ticks 
with(dnow, plot(x,y, xaxt="n", xlab="")) 
## the positions we ant to plot 
atn <- seq(1,N,3) 
## the label for these positions 
lab <- dnow$labels[atn] 
## plot the axis, but do not plot labels 
axis(1, at=atn, labels=FALSE) 
## plot labels 
text(atn, ## x position 
    par("usr")[3]-.05, ## position of the low axis 
    srt=45, ## angle 
    labels=lab, ##labels 
    xpd=TRUE, ## allows plotting outside the region 
    pos=2) 
## par("usr")[3] 
+0

Myślę, że to także ważny wkład. Z 'ggplot2' prawdopodobnie to nie jest wymagane. Ale dobrze jest mieć też. Również lepsze i eleganckie rozwiązanie z 'siatką 'podano w książce R Graphics autorstwa Paula Murrela. – Sam

Powiązane problemy