Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:点和线颜色不同的图例(对于同一图例项)_R_Legend - Fatal编程技术网

R:点和线颜色不同的图例(对于同一图例项)

R:点和线颜色不同的图例(对于同一图例项),r,legend,R,Legend,使用legend()函数可以使点和线具有不同的颜色吗?我觉得我错过了一些很明显的东西。pt.bg选项可以更改背景颜色,但我没有看到pt.fg选项 当分别使用不同颜色的lines()和points()命令并希望图例表示打印内容时,会出现这种情况 我认为使用merge选项是可能的,但我显然不太明白这是为了什么 例如: plot( 0, type="n", xlim=c(0,5), ylim=c(0,5) ) A <- matrix( c( c(1,2,3,4), c(2,1,2,4)), nc

使用legend()函数可以使点和线具有不同的颜色吗?我觉得我错过了一些很明显的东西。
pt.bg
选项可以更改背景颜色,但我没有看到
pt.fg
选项

当分别使用不同颜色的lines()和points()命令并希望图例表示打印内容时,会出现这种情况

我认为使用
merge
选项是可能的,但我显然不太明白这是为了什么

例如:

plot( 0, type="n", xlim=c(0,5), ylim=c(0,5) )
A <- matrix( c( c(1,2,3,4), c(2,1,2,4)), ncol=2 )
B <- matrix( c( c(1,2,3,4), c(1,3,3,2)), ncol=2 )
lines( A, col="red" )
points( A, col="blue", pch=15 )
lines( B, col="green" )
points( B, col="purple", pch=17 )

legend( x="topleft", 
        legend=c("Red line, blue points","Green line, purple points"),
        col=c("red","green"), lwd=1, lty=c(1,2), 
        pch=c(15,17) )

legend( x="bottomleft", 
        legend=c("Red line","blue points","Green line","purple points"),
        col=c("red","blue","green","purple"), lwd=1, lty=c(1,NA,2,NA),
        pch=c(NA,15,NA,17) )

legend( x="left", 
        legend=c("Red line, blue points","Green line, purple points"),
        col=c("red","green"), lwd=1, lty=c(1,2), pch=c(15,17), merge=FALSE )

legend( x="bottomright", 
        legend=c("Red line","blue points","Green line","purple points"), 
        col=c("red","blue","green","purple"), lwd=1, lty=c(1,NA,2,NA), 
        pch=c(NA,15,NA,17), merge=FALSE )

legend( x="topright", 
        legend=c("Red line, blue points","Green line, purple points"), 
        col=c("red","blue","green","purple"), lwd=1, lty=c(1,2), 
        pch=c(15,17), merge=FALSE )

您可以通过两次调用
legend
,第一次绘制线条,然后第二次调用在顶部绘制不可见的线条,但以所需的颜色绘制点:

plot( 0, type="n", xlim=c(0,5), ylim=c(0,5) )
A <- matrix( c( c(1,2,3,4), c(2,1,2,4)), ncol=2 )
B <- matrix( c( c(1,2,3,4), c(1,3,3,2)), ncol=2 )
lines( A, col="red" )
points( A, col="blue", pch=15 )
lines( B, col="green" )
points( B, col="purple", pch=17 )

legend( x="topleft", 
        legend=c("Red line, blue points","Green line, purple points"),
        col=c("red","green"), lwd=1, lty=c(1,2), 
        pch=c(NA,NA) )

legend( x="topleft", 
        legend=c("Red line, blue points","Green line, purple points"),
        col=c("blue","purple"), lwd=1, lty=c(0,0), 
        pch=c(15,17) )

当然,这只能从左边正确排列。如果你想让绘图在一个右角,那么将第一次调用的返回值保存到
legend
,并将其用于第二次调用中的位置。

我猜你必须自己动手/翻滚……太棒了!把它作为答案贴出来。我没有看到你的解决方案。最后一个建议是避免两份文本相互重叠打印,这只适用于“左”对齐的图例。另一个技巧是使用
text.col
选项,该选项也适用于“右”对齐的图例。在第一个调用中使用
text.col=“white”
,在第二个调用中使用
text.col=“black”
调用
legend
。对于水平对齐的图例也不起作用@Simon在问题中发布了他自己的解决方案(修改legend函数本身),它非常适合我。
LEGEND( x="bottomleft", 
        legend=c("Red line, blue points","Green line, purple points"),
        col=c("red","green"), 
        lwd=1, lty=c(1,2), pch=c(15,17) )

LEGEND( x="bottomright", 
        legend=c("Red line, blue points","Green line, purple points"),
        pt.col=c("blue","purple"), line.col=c("red","green"),
        lwd=1, lty=c(1,2), pch=c(15,17) )
plot( 0, type="n", xlim=c(0,5), ylim=c(0,5) )
A <- matrix( c( c(1,2,3,4), c(2,1,2,4)), ncol=2 )
B <- matrix( c( c(1,2,3,4), c(1,3,3,2)), ncol=2 )
lines( A, col="red" )
points( A, col="blue", pch=15 )
lines( B, col="green" )
points( B, col="purple", pch=17 )

legend( x="topleft", 
        legend=c("Red line, blue points","Green line, purple points"),
        col=c("red","green"), lwd=1, lty=c(1,2), 
        pch=c(NA,NA) )

legend( x="topleft", 
        legend=c("Red line, blue points","Green line, purple points"),
        col=c("blue","purple"), lwd=1, lty=c(0,0), 
        pch=c(15,17) )
legend( x="topleft", 
        legend=c("",""),
        col=c("blue","purple"), lwd=1, lty=c(0,0), 
        pch=c(15,17), bty='n' )