如何在图例中包含自定义点符号
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 上使用。)
【讨论】:
以上是关于如何在图例中包含自定义点符号的主要内容,如果未能解决你的问题,请参考以下文章
如何在 NetBeans GUI Builder 中包含自定义面板?