2012-06-03 26 views
6

mio problema riguarda la realizzazione di un grafico per una pubblicazione in R. Ho usato la funzione plot come segue:R trama, asse xe asse y toccando

plot(x=data$SL, y=data$BD, xlab = "SL (mm)", ylab = "BD (mm)", pch=data$pch) 

SL varia da 51,7 a 73,7 e BD dal 13.5 al 20.4. Purtroppo non ho ancora il permesso di pubblicare immagini.

Tuttavia, volendo liberarmi della scatola ho usato "assi = F". Il problema ora è la mancanza di controllo sulla funzione dell'asse. Ho usato:

axis(side=1, lwd=3, xpd=TRUE, at=c(min(data$SL):max(data$SL))) 
axis(side=2, lwd=3, xpd=TRUE, at=c(min(data$BD):max(data$BD))) 

Il problema è che io non riesco a ottenere il ye asse x a venire insieme sullo stesso punto come nella trama con la scatola. Come lasciare che l'asse X e Y si tocchino?

risposta

3

Molto probabilmente l'impostazione xaxs = "i" e yaxs = "i" ti aiuteranno a ottenere il comportamento desiderato.

plot(c(1,2,3),c(2,4,6),axes=F,xaxs = "i",yaxs="i",xlim=c(0,3),ylim=c(0,6)) 
axis(side=1, lwd=3, xpd=TRUE, at=0:3) 
axis(side=2, lwd=3, xpd=TRUE, at=seq(0,6,2)) 
5

Prova box(bty='L') a disegnare solo le parti sinistra e fondo della scatola. Puoi anche disegnare le linee manualmente utilizzando lines, segments o abline e utilizzando le funzioni grconvertX e grconvertY per trovare le posizioni in cui tracciare le linee.

+1

Perfetto, passando 'bty =" L "' a 'trama()' ha funzionato per me. – thomasfedb

1

vi suggerisco di seguire la procedura di profilassi e quindi utilizzare:

box(which = "plot", bty = "l")

esempio:

plot.new() 
plot.window(xlim = c(1, 18), ylim = c(2, 20)) 
points(1:18, 2:19, pch = 1, col = "#FF7F24", cex = 1.2) 
lines(1:18, 2:19, col = "#FF7F24", lwd = 2) 
axis(side  = 1, 
    lwd  = 0, 
    lwd.ticks = 1, 
    at  = 1:18, 
    cex.axis = 0.9) 
title(main = "Plot", 
     ylab = "Y-Axis") 
legend("top", 
     legend = c("Legend"), 
     col = c("#FF7F24"), 
     text.col = c("#FF7F24"), 
     pch = 1, 
     bty = "n", 
     cex = 1.2) 
axis(side  = 2, 
    lwd  = 0, 
    lwd.ticks = 1) 
box(which = "plot", bty = "l") 

Si dovrebbe passare le opzioni lwd = 0 e lwd.ticks = 1 ai tuoi separate axis() chiamate in ordine per evitare che alcune parti dei tuoi assi appaiano più grasse di altre parti del tuo asse, perché alcune vengono sovrascritte dalla tua chiamata a box() e alcune fanno n ot.

La soluzione di utilizzare box() alla fine è, penso, più generale in quanto è possibile utilizzarlo quando ad es. non puoi o non vuoi passare bty = "l" nella tua chiamata plot.default o plot.window.

Problemi correlati