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.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
I essentially have two questions:
1) How do I plot the first column (x-axis) versus the second column (y-axis)? I'm trying this (from reading this site):
data <- read.table("foo.csv", header=T,sep=",") attach(data) scale <- data serial <- data plot(scale,serial)
But I get this error back:
Error in stripchart.default(x1, ...) : invalid plotting method
Any idea what I'm doing wrong? A quick Google search reveals someone else with the same problem but no relevant answer. UPDATE: It turns out it works fine if I skip the two assignment statements in the middle. Any idea why this is?
The second question follows pretty easily after the first:
2) How do I plot the first column (x-axis) versus all the other columns on the y-axis? I presume it's pretty easy once I get around the first problem I'm running into, but am just a bit new to R so I'm still wrapping my head around it.
You don't need the two lines:
scale <- data serial <- data
as scale and serial are already set from the headers in the
scale <- data creates an element from a
data 1 5 2 10 3 12 4 15
scale from the
read.table is a vector
5 10 12 15
plot(scale, serial) function expects vector rather than a data.frame, so you just need to do
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....
In your example,
won't work because
serial are both data frames, e.g.
class(scale)  "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')