Plotting Simple Data in R

后端 未结 7 1617
旧时难觅i
旧时难觅i 2021-02-01 06:28

I have a comma separated file named foo.csv containing the following data:

scale, serial, spawn, for, worker
5, 0.000178, 0.000288, 0.000292, 0.0003         


        
相关标签:
7条回答
  • 2021-02-01 06:34
    data <- read.table(...)
    plot(data$scale,data$serial)
    
    0 讨论(0)
  • 2021-02-01 06:45

    I'm new in R, but if you want to draw scale vs. all other columns in one plot, easy and with some elegance :) for printing or presentation, you may use Prof. Hadley Wickham's packages ggplot2 & reshape.

    Installation:

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

    Drawing your example:

    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)
    

    You could also use points (geom=”points”), choose different colours or shapes for different variables dots (colours=variable or shape=variable), adjust axis, set individual options for every line etc.

    Link to online documentation.

    0 讨论(0)
  • 2021-02-01 06:53

    You don't need the two lines:

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

    as scale and serial are already set from the headers in the read.table.

    Also scale <- data[1] creates an element from a data.frame

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

    whereas scale from the read.table is a vector

    5 10 12 15
    

    and the plot(scale, serial) function expects vector rather than a data.frame, so you just need to do

    plot(scale, serial)
    

    One approach to plotting the other columns of data on the y-axis:

    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")
    

    There are probably better ways of doing this, but that is beyond my current R knowledge....

    0 讨论(0)
  • 2021-02-01 06:53

    Try this:

    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)
    
    0 讨论(0)
  • 2021-02-01 06:55

    In your example,

    plot(scale, serial) 
    

    won't work because scale and serial are both data frames, e.g.

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

    You could try the following and use points(), once the plot has been generated, to plot the remaining columns. Note, I used the ylim parameter in plot to accommodate the range in the third column.

    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')
    
    0 讨论(0)
  • 2021-02-01 06:55

    I am far from being an R expert, but I think you need a data.frame:

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

    It does at least plot something on my R setup!

    Following advice in luapyad's answer, I came up with this. I renamed the header "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
    

    then:

    foo <- read.table("foo.csv", header=T,sep=",")
    attach(foo)
    plot( scaling, serial );
    
    0 讨论(0)
提交回复
热议问题