2015-08-09 6 views
5

Ist es möglich, die Legende von der folgenden HandlungVereinbaren Sie Punkte und Linien in einem r Plotlegende

plot(1,1, type="n") 
legend("topleft", c("1", "2"), col=c("darkblue", "darkred"), pch = 1, bty = "n", horiz = T, lwd=1.25, cex=1.8) 

zu schauen, wie dieser („Punkt-Linie-Punkt“ Muster) neu zu ordnen? enter image description here

Antwort

3

Normalerweise, wenn Sie dieses Maß an Kontrolle über die Handlungselemente wollen, müssen Sie es mit Primitiven manuell tun (points(), lines()/segments(), text(), etc.) und sorgfältige Berechnungen aus den Plotparameter (zB par('usr')). Es ist nicht einfach. Hier ist ein Beispiel dafür, wie dies geschehen könnte:

point.line.point <- function(x1,y1,x2=x1,y2=y1,...) { 
    points(c(x1,x2),c(y1,y2),...); 
    segments(x1,y1,x2,y2,...); 
}; 
legend.plp <- function(x,y,labels,col,linewidth=diff(par('usr')[1:2])/10,textgap=diff(par('usr')[1:2])/20,...) { 
    comb <- cbind(labels,col); 
    xc <- x; 
    for (i in seq_len(nrow(comb))) { 
     x2 <- xc+linewidth; 
     point.line.point(xc,y,x2,col=comb[i,'col'],...); 
     text(x2+textgap,y,comb[i,'labels'],...); 
     xc <- x2+textgap*1.5+strwidth(comb[i,'labels']); 
    }; 
}; 

plot(1,1,type="n"); 
legend.plp(par('usr')[1]+diff(par('usr')[1:2])/20,par('usr')[4]-diff(par('usr')[3:4])/20,1:2,c('darkblue','darkred'),font=2,cex=1.5); 

plot

3

Hier ist eine alternative Lösung, die das Gegenteil von der elegant ist. Es geht um ein paar Parzellen (eine pro Legende) Einbetten und viel manuelle Manipulation (die ‚Legenden‘ zu setzen, wo Sie sie haben wollen):

library(Hmisc) 
data(mtcars) 
#plots the one in blue 
plot(mtcars$cyl, type="o", col="darkblue") 
#plots the one in red 
lines(mtcars$carb, type="o", col="darkred") 
#name the legends 
text(6.5,7, "Cyl", font=2) 
text(14,7, "Carb", font=2) 
#add the subplots, it's actually a normal plot wrapped around the subplot with the x and y positions 
subplot(plot(c(1,0),c(1,1), xlab=NA, ylab=NA, xaxt="n", yaxt="n", col="darkblue", type="o", axes=FALSE), 3, 7) 
subplot(plot(c(1,0),c(1,1), xlab=NA, ylab=NA, xaxt="n", yaxt="n", col="darkred", type="o", axes=FALSE), 10, 7) 

, dass die folgende Handlung ergibt: