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[1]
serial <- data[2]
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.
To plot a graph in R using a CSV file, we need a CSV file with two-column, the values in the first column will be considered as the points at the x-axis and the values in the second column will be considered as the points at the y-axis.
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....
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')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With