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

Posted

技术标签:

【中文标题】如何在图例中包含自定义点符号【英文标题】:How can I include custom point symbols in legend 【发布时间】:2018-11-13 21:21:27 【问题描述】:

考虑以下数据/图,因为我只将数值分配给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 作为“+”符号,但如果我想绘制一个“!”怎么办?符号代替?

【问题讨论】:

因为您将向量传递给pch,并且向量必须是相同的数据类型 如果我使用pch=c('20','+','20'),它也会抛出警告并且没有正确绘制它,尽管向量现在只包含字符。 您需要查看?points 以找到“+”的等值数字 - 请参阅下面的答案 您需要plot(1, type="n", xlab="", ylab="", ylim = c(1,12), xlim=c(1,12)); text(1:12, rep("!", 12)) 之类的东西吗? 不,我正在寻找一种在图例中混合字符和点类型的方法。但是克里斯的回答已经解决了。谢谢! 【参考方案1】:

您可以传入数字向量或要用作字符的符号。您不能像尝试那样混合两者,因为向量只能是一种数据类型 - 在您的情况下,它将向量中的所有值强制为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

【讨论】:

我编辑了这个问题。我知道我可以使用pch=3,但是如果我想绘制一个“!”怎么办?符号代替?这不可能吗? 我明白了。据我所知,这是不可能的。您要么传递一个数字向量,要么传递一个单字符符号的向量 - 看起来你不能混合这两个 编辑:发现 ! 符号为 pch=33 utf8ToInt("!") 告诉你现在是 33 岁。【参考方案2】:

?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 上使用。)

【讨论】:

以上是关于如何在图例中包含自定义点符号的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的自定义主题中包含自定义 js 文件?

如何在 NetBeans GUI Builder 中包含自定义面板?

如何在AMP分析中包含自定义变量?

如何在 logback-spring.xml 中包含自定义 xml?

有没有办法在 emscripten 中包含自定义标题?

PHP Wordpress作者页面在配置文件中包含自定义字段