如何为不同大小的点创建第二个图例

时间:2018-01-08 17:34:15

标签: r

第一个图例工作正常,如下所示;

ID     Reason
1      Approved

然后我尝试创建第二个图例来显示相对尺寸,在图上的其他地方,以免模糊任何点

legend(-0.108,51.712,
       legend = c("Bakerloo","Central", "Circle", "Distric",
                  "H'smith & City", "Jubilee", "Metropolitan", 
                  "Northern", "Piccadilly", "Victoria",
                  "W'loo & City"), 
       col = c(bakerloocol, centralcol, circlecol, districtcol, 
               hsmithcitycol, jubileecol, metropolitancol, 
               northerncol, piccadillycol, victoriacol, 
               waterloocitycol),
       pch = 16)

这个错误,

legend(-0.135,51,46,
       legend = c("100,000", "50,000", "10,000"),
       pch = 16,
       cex = c(10*(100000)/130627, 10*(50000)/130627, 10*(10000)/130627))

我不知道如何解释,因为它似乎没有重复我在该行代码中使用的任何符号。

以任何方式显示传奇中的点大小!

1 个答案:

答案 0 :(得分:0)

警告

  

条件的长度> 1,只使用第一个元素

表示if语句有多个值,尽管TRUE语句中只允许FALSEif

例如,

if(c(TRUE, FALSE)){ 
    print('Yes, I'm called!')
}

发出此警告。您可以看到这没有意义 - 应该执行if(TRUE)之后的阻止而if(FALSE)之后的阻止不应该。但是if(c(TRUE, FALSE))呢?这没有任何意义,并给出了这个警告。

通过搜索警告

中提到的行
  

if(xc <0)

legend的源代码中(只在R中输入legend而没有()),您会发现xc是从变量Cex生成的是par('cex')乘以legend(cex = ...)参数。如果您在那里提供多个值,那么最终xc将成为多个值,而[multiple values] < 0当然会提供多个TRUE / FALSE s - 具体取决于每个值是否为多个值是&lt;因此,我们在这里有if([multiple values])这种情况。

结论:不要向legend(cex = ...)提供多个值。请改用legend(pt.cex = ...)legend(cex = ...)旨在按某种因素缩放整个图例。