如何在图例中包含自定义点符号

时间:2018-06-04 13:55:28

标签: r plot legend

考虑以下数据/情节,因为我只是将数值赋给pch

plot(1:20, col='blue', pch=20); 
points(2:22, col='red', pch='+', cex=2)
points(4:24, col='green', pch=15)

legend('bottomright',c('Blue','Red', 'Green'),   
       col=c("blue", "red", "green"), horiz=T, cex=0.8,
       pch=c(20,20,15), bg='white')

但是当我包含一个字符值时,它仍然会绘制一个图例,但会使用错误的点类型

legend('bottom',c('Blue','Red', 'Green'),   
       col=c("blue", "red", "green"), horiz=F, cex=0.8,
       pch=c(20,'+',20), bg='white')

当仅使用字符值时,图例再次正确:

legend('bottomleft',c('Blue','Red', 'Green'),   
       col=c("blue", "red", "green"), horiz=F, cex=0.8,
       pch=c('!','+','*'), bg='white')

中间的传说是问题所在。 如何使用正确的点类型绘制图例?

我知道我可以使用pch=3作为“+”符号,但如果我试图绘制“!”该怎么办?符号而不是? plot

2 个答案:

答案 0 :(得分:3)

您可以传入数字向量或要用作字符的符号。由于向量只能是一种数据类型,因此您无法将两者混合在一起 - 在您的情况下,它会将向量中的所有值强制转换为character

以下是您应该指定的内容:

legend('bottomright',c('Blue','Red', 'Green'),   
   col=c("blue", "red", "green"), horiz=T, cex=0.8,
   pch=list(20,3,15), bg='white')

编辑:由于您需要特定的!符号,因此您必须查找该值的pch值。在这种情况下,它是pch = 33

答案 1 :(得分:1)

?points可以将ASCii代码传递给您想要绘制的符号。对于+,ASCii代码是43。

plot(1:20, col='blue', pch=20); 
points(2:22, col='red', pch='+', cex=2)
points(4:24, col='green', pch=15)

legend('bottomright',c('Blue','Red', 'Green'),   
       col=c("blue", "red", "green"), horiz=T, cex=0.8,
       pch=c(20,43,15), bg='white')

以下是pch的可接受值:

  

NA_integer_:没有符号。
  0:18:S兼容的矢量符号。
  19:25:进一步的R矢量符号。
  26:31:未使用(并忽略)。
  32:127:ASCII字符。
  128:255本机字符仅在单字节语言环境中用于   符号字体。 (128:159仅用于Windows。)