代码之家  ›  专栏  ›  技术社区  ›  I82Much

R-如何使用一个向量的内容作为绘图中的符号?

  •  6
  • I82Much  · 技术社区  · 15 年前

    我有两个长度相等的数字向量。当使用第二个向量中的对应元素作为打印字符时,如何绘制第一个向量(背景:我对第一列进行了排序,第二列保存原始索引。我想使用索引作为可打印字符,这样我就可以看到哪些数据点是异常值,因为每个数字代表一次数据运行)。

     > x
    $x
     [1]   25   29   30   34   38  572  700  733  870  879  899  934  982 1054 1135 1258
    [17] 1315 1491 1685 1700 2069 2131 2284 3498 3506 4467 4656 5633 6642 8348
    
    $ix
     [1] 23  3 18 30 13  8  4 14 11 17 12 29  9 15 19 16  7  1 20  2  6 28 21 10  5 22 24 26
    [29] 25 27
    

    我尝试过plot(x$x,pch=str(x$ix)),但它在数字上处理x$ix。如果这是Python,我会做一些类似字符串=[str(x)for x in x$ix]的事情。但这是R,我已经忘记了我以前知道的大部分。

    > as.character(x$ix)
     [1] "23" "3"  "18" "30" "13" "8"  "4"  "14" "11" "17" "12" "29" "9"  "15" "19" "16"
    [17] "7"  "1"  "20" "2"  "6"  "28" "21" "10" "5"  "22" "24" "26" "25" "27"
    

    我可以用它作为pch的输入。但是只使用了第一个字符(根据文档,这是正常的)。

    我知道有办法做到这一点;我是在大学里做的。但我一辈子都记不起我是怎么做到的。

    alt text

    带标签的图表,但不正确: alt text

    3 回复  |  直到 6 年前
        1
  •  12
  •   doug    15 年前

    x = 1:4
    y = x
    plot(x, y, ann=F, axis=F, col="blue", pch=16)
    text(x, y, labels=c("1st", "2nd", "3rd", "4th"), col="red", pos=c(3,4,4,1), offset=0.6)
    

    labels=as.character(label\u向量)

    然后用这个替换上面第4行的第三个参数。

    “Text”函数的用途相当广泛,因为您可以传入各种参数——例如(如上面的示例所示),您可以使用“col”将文本设置为与数据点不同的颜色;还可以分别为每个文本标签指定位置(相对于由给定文本标签注释的数据点)。例如,这对于防止文本标签与一个轴重叠非常有用,这是我第一次在没有设置“pos”的情况下运行此示例时发生的情况。因此,通过设置“pos”(如c(3,4,4,1)),我将文本标签的位置设置为“上方”、“右侧”、“右侧”和“下方”——向上移动第一个数据点,使其不会碰到底部x轴,向下移动第四个数据点,使其不会碰到顶部x轴。此外,使用“偏移”(默认值为0.5)可以指定位置调整的幅度。

        2
  •  3
  •   joran    14 年前

    下面是使用 ggplot2 包裹:

    library(ggplot2)
    x <- rnorm(10)
    y <- rnorm(10)
    labs <- 1:10
    ggplot()+geom_text(aes(x=x,y=y,label=labs))
    

    enter image description here

        3
  •  0
  •   joran    14 年前

    这里有一个非常基本的解决方案,使用 lattice :

    dat <- data.frame(x = rnorm(10), y = rnorm(10),
                      labs = as.character(1:10))
    xyplot(y~x,data = dat,panel = function(x,labs){
                                     panel.text(x,y,labels = labs)},
           labs = dat$labs)
    

    enter image description here