在r图传奇中排列点和线

ECI*_*CII 5 plot r legend

是否可以重新排列下图的图例

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)
Run Code Online (Sandbox Code Playgroud)

看起来像这样("点线点"模式)? 在此输入图像描述

bgo*_*dst 3

通常,如果您希望对绘图元素进行这种级别的控制,则必须使用基元(points()lines()/ segments()text()等)手动执行此操作,并根据绘图参数(例如par('usr'))进行仔细计算。这并不容易。以下是如何完成此操作的示例:

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);
Run Code Online (Sandbox Code Playgroud)

阴谋