代码之家  ›  专栏  ›  技术社区  ›  Chris Bunch

在R中绘制简单数据

  •  19
  • Chris Bunch  · 技术社区  · 17 年前

    foo.csv 包含以下数据:

    scale, serial, spawn, for, worker
    5, 0.000178, 0.000288, 0.000292, 0.000300
    10, 0.156986, 0.297926, 0.064509, 0.066297
    12, 2.658998, 6.059502, 0.912733, 0.923606
    15, 188.023411, 719.463264, 164.111459, 161.687982
    

    我基本上有两个问题:

    1) 如何绘制第一列(x轴)与第二列(y轴)?我正在(通过阅读)尝试这个 this site ):

    data <- read.table("foo.csv", header=T,sep=",")
    attach(data)
    scale <- data[1]
    serial <- data[2]
    plot(scale,serial)
    

    但我得到了这个错误:

    Error in stripchart.default(x1, ...) : invalid plotting method
    

    知道我做错了什么吗?A. quick Google search 发现其他人有同样的问题,但没有相关的答案。更新:如果我跳过中间的两个赋值语句,它会很好。知道为什么吗?

    第二个问题很容易在第一个问题之后出现:

    2) 如何绘制第一列(x轴)与y轴上的所有其他列?我想,一旦我解决了遇到的第一个问题,这就很容易了,但我对R只是有点陌生,所以我仍然在绞尽脑汁。

    7 回复  |  直到 17 年前
        1
  •  13
  •   luapyad    17 年前

    您不需要这两行:

    scale <- data[1]
    serial <- data[2]
    

    as scale和serial已从中的标题设置 read.table .

    而且 scale <- data[1] 从一个元素创建一个元素 data.frame

      data[1]
    1     5
    2    10
    3    12
    4    15
    

    鉴于 scale 从 读表

    5 10 12 15
    

    和 plot(scale, serial) 函数需要向量而不是data.frame,所以只需

    plot(scale, serial)
    

    在y轴上绘制其他数据列的一种方法:

    plot(scale,serial, ylab="")
    par(new=TRUE) 
    plot(scale,spawn,axes=F, ylab="", type="b")
    par(new=TRUE) 
    plot(scale,for., axes=F, ylab="", type="b")
    par(new=TRUE) 
    plot(scale,worker,axes=F, ylab="", type="b")
    

        2
  •  7
  •   andrewj    17 年前

    以你为例,,

    plot(scale, serial) 
    

    不起作用,因为 scale 和 serial 都是数据帧,例如。

    class(scale)
    [1] "data.frame"
    

    您可以尝试以下方法并使用 points() ylim 参数在 plot 以适应第三列中的范围。

    data <- read.csv('foo.csv', header=T)
    plot(data$scale, data$serial, ylim=c(0,750))
    points(data$scale, data$spawn, col='red')
    points(data$scale, data$for., col='green')
    points(data$scale, data$worker, col='blue')
    
        3
  •  5
  •   zzr    17 年前

    安装:

    install.packages(“ggplot2”,dep=T)
    install.packages(“reshape”,dep=T)
    

    绘制您的示例:

    library(ggplot2)
    library(reshape)
    
    #read data
    data = read.table("foo.csv", header=T,sep=",")
    
    #melt data “scale vs. all”
    data2=melt(data,id=c("scale"))
    data2
    
       scale variable      value
    1      5   serial   0.000178
    2     10   serial   0.156986
    3     12   serial   2.658998
    4     15   serial 188.023411
    5      5    spawn   0.000288
    6     10    spawn   0.297926
    7     12    spawn   6.059502
    8     15    spawn 719.463264
    9      5     for.   0.000292
    10    10     for.   0.064509
    11    12     for.   0.912733
    12    15     for. 164.111459
    13     5   worker   0.000300
    14    10   worker   0.066297
    15    12   worker   0.923606
    16    15   worker 161.687982
    
    #draw all variables at once as line with different linetypes
    qplot(scale,value,data=data2,geom="line",linetype=variable)
    

    你也可以使用积分( geom=”points” colours=variable or shape=variable ),调整轴,为每条线设置单独选项等。

    链接到 online documentation .

        4
  •  2
  •   anon anon    17 年前

    我远非R专家,但我认为您需要一个数据框架:

    plot(data.frame(data[1],data[2]))
    

    它至少在我的R设置上绘制了一些东西!

    根据luapyad回答中的建议,我得出了这个结论。我将标题重命名为“scale”:

    scaling, serial, spawn, for, worker
    5, 0.000178, 0.000288, 0.000292, 0.000300
    10, 0.156986, 0.297926, 0.064509, 0.066297
    12, 2.658998, 6.059502, 0.912733, 0.923606
    15, 188.023411, 719.463264, 164.111459, 161.687982
    

    然后:

    foo <- read.table("foo.csv", header=T,sep=",")
    attach(foo)
    plot( scaling, serial );
    
        5
  •  2
  •   Jouni K. Seppänen    17 年前

    试试这个:

    data <- read.csv('foo.csv')
    plot(serial ~ scale, data)
    dev.new()
    plot(spawn ~ scale, data)
    dev.new()
    plot(for. ~ scale, data)
    dev.new()
    plot(worker ~ scale, data)
    
        6
  •  0
  •   Tom    13 年前

    有一种简单的r方式来绘制它:

    https://code.google.com/p/simple-r/

    r -cdps, -k1:2 foo.csv
    

    来得到你想要的情节。将其置于详细模式(-v)以查看相应的R脚本。

        7
  •  0
  •   Tong Gao    13 年前
    data <- read.table(...)
    plot(data$scale,data$serial)
    
    推荐文章