2012-09-06 2 views
17

Quando creo il grafico seguente, ottengo spazio indesiderato tra l'area di stampa e l'asse (ovvero lo spazio bianco tra la casella blu e l'asse x.) Come posso rimuovere questo spazio e rendere tracciando a filo area con la trama assi? Grazie.Rimuovi spaziatura nell'area di disegno in r

xleft<-c(1,2,2.5) 
xright<-c(2,2.5,2.75) 
ybottom<-c(1,2,2.5) 
ytop<-c(2,2.5,2.75) 

par(mar = c(15,15,2.75,2.75) + 0.1) 
plot(c(1,2.75),c(1,2.75),type="n",main="title",xlab="site.x",ylab="ylab") 
rect(xleft,ybottom,xright,ytop,col=c("blue","red","green")) 

#Label position along axes 
x.label.position<-(xleft+xright)/2 
y.label.position<-(ybottom+ytop)/2 

#Labels 
x.label<-c("Long species Name1","Long species Name2","Long species Name3") 
y.label<-c("Long species Name4","Long species Name5","Long species Name5") 

text(par()$usr[1]-0.5,y.label.position,y.label,xpd=TRUE,adj=1) 
text(y=par()$usr[3]-0.5,x=x.label.position,x.label,xpd=TRUE,adj=1,srt=90) 

par(xpd=TRUE) 
legend(-0.1,0,legend=c("Species A","Species B","Species C"),fill=c("blue", "red", "green")) 

enter image description here

UPDATE ho provato il suggerimento di plannapus con i miei dati reali, ma può ottenere solo l'asse y a comportarsi c'è qualche altra cosa in questo pezzo di codice che aggiunge spazio ai lati dell'area di disegno?

quartz("colour.plot") 
par(mar=c(15,15,4,2)+0.1)#sets margins of plotting area 

#create the data plot 
    plot(c(0,100), c(0,100), type = "n", main = paste(x,"vs",y," -",depth),xlab=paste("Species composition in remainder ",x),ylab=paste("Species composition in remainder ",y),asp=1,xaxs="i",yaxs="i") 

#Add the rectangles 
rect(mdf$xleft,mdf$ybottom,mdf$xright,mdf$ytop,col=mdf$colour) 

produce

enter image description here

+0

"c'è qualche altro in questo pezzo di codice che è l'aggiunta di spazio ai lati della zona di tracciato?" Sì: 'asp = 1'. Con questo stai forzando gli assi xey ad essere uguali, il che probabilmente è in conflitto con la dimensione della tua area di trama. – plannapus

+0

aggiungendo 'par (pty =" s ")' prima della chiamata a 'plot' dovrebbe forzare la regione di stampa ad essere quadrata (quindi' 's" ') e non rettangolare come sull'immagine e quindi correggere per' asp' "problema tecnico". – plannapus

+0

Penso che dovresti andare a rispondere @plannapus, o similmente impostare 'xlim',' ylim' per abbinare la regione che vuoi tracciare. Sebbene la soluzione di @ Alan dia l'aspetto giusto, non è concettualmente corretta per quello che vuoi fare qui. Solo "cura il sintomo", per così dire. – Backlin

risposta

24

C'è un argomento nella funzione plot che gestisce quello: xaxs (e yaxs per l'asse y). Come impostazione predefinita è impostato su xaxs="r", ovvero il 4% del valore dell'asse è lasciato su ciascun lato. Per impostarlo su 0: xaxs="i". Vedere la sezione xaxs in ?par per ulteriori informazioni.

plot(c(1,2.75),c(1,2.75),type="n",main="title",xlab="site.x",ylab="ylab", xaxs="i", yaxs="i") 
rect(xleft,ybottom,xright,ytop,col=c("blue","red","green")) 

enter image description here

+0

@planapus Vorrei utilizzare la soluzione, ma ho problemi perché sto usando asp = 1 che aggiunge spazio a entrambi i lati dell'asse x con la soluzione (vedi esempio sotto aggiornamento in questione). Esiste comunque per evitare questo problema? – Elizabeth

+0

@Elizabeth Hai provato 'par (pty =" s ")' come suggerito nei commenti sopra? (Idealmente, però, la soluzione sarebbe definire esattamente la dimensione della regione di tracciamento, ma è un dolore da fare) – plannapus

+0

Ho appena notato che ho avuto un errore in quella linea. Risolto e ora funziona. Grazie :) – Elizabeth

4
plot(c(1,2.75),c(1,2.75),type="n",main="title",xlab="site.x",ylab="ylab",axes=F) # ann 
axis(1,pos=1) 
axis(2,pos=1) 

Tutti gli assi sono rimuovere le allora è possibile aggiungere nuovi assi al pos che si desidera.

+0

Funziona correttamente ma va notato che questa soluzione sposta gli assi ma non modifica l'area di tracciamento. – plannapus