2009-05-18 46 views
18

Tôi có một dấu phẩy tập tin tách tên foo.csv chứa các dữ liệu sau:Vẽ dữ liệu đơn giản trong R

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 

tôi về cơ bản có hai câu hỏi:

1) Làm thế nào để vẽ cột đầu tiên (x- trục) so với cột thứ hai (trục y)? Tôi đang cố gắng này (từ việc đọc this site):

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

Nhưng tôi nhận được lỗi này lại:

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

Bất kỳ ý tưởng những gì tôi đang làm sai? A quick Google search cho thấy người khác có cùng vấn đề nhưng không có câu trả lời phù hợp. UPDATE: Hóa ra nó hoạt động tốt nếu tôi bỏ qua hai câu lệnh gán ở giữa. Có ai biết vì sao lại thế này không?

Câu hỏi thứ hai sau khá dễ dàng sau khi người đầu tiên:

2) Làm thế nào để vẽ cột đầu tiên (trục x) so với tất cả các cột khác trên trục y? Tôi đoán nó khá dễ dàng một khi tôi gặp rắc rối đầu tiên mà tôi đang gặp phải, nhưng tôi chỉ mới một chút với R nên tôi vẫn quấn đầu quanh nó.

Trả lời

11

Bạn không cần hai dòng:

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

như quy mô và nối tiếp đã được thiết lập từ các tiêu đề trong số read.table.

Cũng scale <- data[1] tạo ra một phần tử từ một data.frame

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

trong khi scale từ read.table là một vector

5 10 12 15 

plot(scale, serial) chức năng hy vọng vector chứ không phải là một data.frame, vì vậy bạn chỉ cần phải làm

plot(scale, serial) 

Một cách tiếp cận để âm mưu các cột khác của dữ liệu trên trục 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") 

Có lẽ cách tốt hơn để làm điều này, nhưng đó là ngoài kiến ​​thức R hiện tại của tôi ....

+0

Vì vậy, cuộc gọi cốt truyện() của anh ấy sẽ như thế nào? –

+0

chỉ cần sử dụng âm mưu (quy mô, nối tiếp) – luapyad

+0

Thật không may, "quy mô" có vẻ là một toàn cầu của một số loại. –

2

Tôi xa là một chuyên gia R, nhưng tôi nghĩ rằng bạn cần một data.frame:

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

Nó ít nhất âm mưu một cái gì đó vào thiết lập R của tôi!

Làm theo lời khuyên trong câu trả lời của luapyad, tôi đã nghĩ ra điều này. Tôi đổi tên tiêu đề "quy mô":

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 

thì:

foo <- read.table("foo.csv", header=T,sep=",") 
attach(foo) 
plot(scaling, serial); 
2

Hãy thử điều này:

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) 
+2

bạn có thể kết hợp 4 ô thành một hình ảnh bằng cách sử dụng matplot (dữ liệu [1], dữ liệu [2,5], type = "b") hoặc với các lệnh lô riêng lẻ trước bằng cách bố trí (ma trận (c (1,2) , 3,4), 2,2, byrow = TRUE)) – bubaker

5

Tôi mới trong R, nhưng nếu bạn muốn vẽ quy mô so với tất cả các cột khác trong một cốt truyện, đơn giản và sang trọng với một số :) cho in ấn hoặc trình bày, bạn có thể sử dụng gói của giáo sư Hadley Wickham ggplot2 & định hình lại.

Cài đặt:

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

Vẽ ví dụ của bạn:

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) 

Bạn cũng có thể sử dụng điểm (geom=”points”), chọn màu sắc khác nhau hoặc hình dạng cho các biến chấm khác nhau (colours=variable or shape=variable), điều chỉnh trục, thiết lập các tùy chọn riêng lẻ cho mỗi dòng, v.v.

Liên kết đến online documentation.

7

Trong ví dụ của bạn,

plot(scale, serial) 

sẽ không làm việc vì scaleserial đều khung dữ liệu, ví dụ

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

Bạn có thể thử cách sau và sử dụng points(), khi cốt truyện được tạo, để vẽ các cột còn lại. Lưu ý, tôi đã sử dụng thông số ylim trong plot để điều chỉnh phạm vi trong cột thứ ba.

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') 
+1

Cảm ơn! Điều đó cuối cùng đã giải quyết được vấn đề của tôi. –

0

Có một cách đơn giản-r âm mưu nó:

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

Sử dụng kịch bản đó, bạn chỉ cần gõ:

r -cdps, -k1:2 foo.csv 

Để có được cốt truyện bạn muốn . Đặt nó vào chế độ tiết (v) để xem kịch bản R tương ứng.

0
data <- read.table(...) 
plot(data$scale,data$serial) 
Các vấn đề liên quan