18

是否可以在 R 图例中混合使用字符和数字作为绘图符号?

plot(x=c(2,4,8),y=c(5,4,2),pch=16)
points(x=c(3,5),y=c(2,4),pch="+")
legend(7,4.5,pch=c("+",16),legend=c("A","B")) #This is the problem
4

5 回答 5

11

使用“+”字符的等价数字:

plot(x=c(2,4,8),y=c(5,4,2),pch=16)
points(x=c(3,5),y=c(2,4),pch="+")
legend(7,4.5,pch=c(43,16),legend=c("A","B"))
于 2013-08-06T20:39:56.460 回答
7

我的第一个想法是绘制图例两次,一次打印字符符号,一次打印数字符号:

plot(x=c(2,4,8),y=c(5,4,2),pch=16)
points(x=c(3,5),y=c(2,4),pch="+")
legend(7,4.5,pch=c(NA,16),legend=c("A","B")) # NA means don't plot pt. character 
legend(7,4.5,pch=c("+",NA),legend=c("A","B"))

注意:奇怪的是,这适用于 R 的本机图形设备(在 Windows 上)和 in pdf(),但不适用于bmp()png()设备 ...

在此处输入图像描述

于 2012-11-19T13:01:33.690 回答
7

实际上所有符号都有数字等价物!

在此处输入图像描述

资料来源:戴夫·罗伯茨

pch 代码是上图的 Y 和 X 坐标的串联

  • 例如,+符号位于行 (Y) 4 和列 (X) 3,因此可以使用 pch = 43 绘制。

例子:

plot(x=c(2,4,8),y=c(5,4,2),pch=16)
points(x=c(3,5),y=c(2,4),pch="+")
legend(7,4.5,pch=c(43,16),legend=c("A","B"))
于 2017-03-28T15:37:27.350 回答
3

我多次碰到这个问题,所以我在下面写了一个小函数。您可以使用指定 pch 值,例如

pch=c(15:17,s2n("|"))

字符串转数字

于 2016-08-31T21:07:11.533 回答
0

如前面的答案所述,您可以简单地添加要绘制的数字和字符符号的数字等价物。

但是,只是一个相关的问题:如果您想绘制更大的数字(例如,> 100)或字符串(例如,'ABC')作为符号,您需要使用基于 using 的完全不同的方法text()

`Plot(x,y,dat,type='n') ; text(x,y,labels = c(100,'ABC')

在这种情况下创建图例更加复杂,我想出的最佳方法是将图例堆叠在一起并使用符号和描述的legend参数pch

pchs <- c(100,'ABC','540',sum(13+200),'SO77')

plot(1:5,1:5,type='n',xlim=c(1,5.1))
  text(1:5,1:5,labels = pchs)
  legend(3.5,3,legend = pchs,bty='n',title = '')
  legend(3.5,3,legend = paste(strrep(' ',12),'ID#',pchs),bty='n',title='Legend')
  rect(xleft = 3.7, ybottom = 1.5, xright = 5.1, ytop = 3)
  • 这用于strrep连接空格以将文本从“符号”转移,并rect用于追溯地在打印的图例文本周围放置一个框。

在此处输入图像描述

于 2018-05-24T18:31:44.023 回答