2014-04-07 2 views
7

Ich zeichne ein Diagramm wie folgt. Der Code, den ich verwenden, um die Legende zu erzeugen, istSo verkleinern Sie die inneren Ränder der Legendenbox

legend(4, 20, c("Placebo", "Progabide"), lty=1:2, pch=c(1,16), col=1:2, cex=0.8) 

enter image description here

Das Problem ist, dass der innere Rand (in vertikaler Richtung) zu groß ist, und ich will es reduzieren. Ich denke, ein alternativer Weg, um die inneren Ränder zu schrumpfen, ist es, "cex" weiter zu reduzieren. Aber dann wird auch der Text in der Box kleiner. Gibt es eine Möglichkeit, die Box zu verkleinern, aber ihren Inhalt nicht zu reduzieren?

+1

Sie könnten das Feld mit dem Argument 'bty = 'n'' unterdrücken und die eigenen Grundstück mit' rect() '. – jbaums

Antwort

9

Hier ist ein Beispiel, wie man das mit rect macht, wie @jbaums erwähnt. Indem Sie die reellen Informationen der Standardlegende verwenden, können Sie sicherstellen, dass die Boxposition korrekt ist.

plot(x=1:10,y=1:10+rnorm(10), ylim=c(0,11)) 

# draw default box and store size of default rect in 'a' 
# disable this default rect by adding plot=F to legend() 
a=legend(x=1,y=9, c("old box", "new box"), lty=1, col=2:1, cex=0.8, y.intersp=0.8,box.col=2)#,plot=F) 

# box size reduced by factor 0.75 
a=a$rect 
mid = a$top - 0.5*a$h 
reduction = 0.75 

# draw new box 
rect(xleft=a$left, ytop=mid+0.5*reduction*a$h, xright=a$left+a$w, ybottom=mid-0.5*reduction*a$h) 
# add legend items to new box 
legend(x=1,y=9, c("old box", "new box"), lty=1, col=2:1, cex=0.8, y.intersp=0.8, bty='n') 

enter image description here