2009-05-18 10 views
18

mam oddzielone przecinkami plik o nazwie foo.csv zawierający następujące dane:Wykreślanie Proste danych w 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 

I mają zasadniczo dwa pytania:

1) Jak mogę wykreślić pierwszą kolumnę (X- osi) a druga kolumna (oś y)? Próbuję to (od czytania this site):

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

Ale ten błąd tylna

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

Każdy pomysł co robię źle? A quick Google search ujawnia kogoś innego z tym samym problemem, ale bez odpowiedniej odpowiedzi. AKTUALIZACJA: Okazuje się, że działa dobrze, jeśli pominę dwie instrukcje przypisania w środku. Masz pomysł, dlaczego tak jest?

Drugie pytanie następuje dość łatwo po pierwsze:

2) Jak mogę wykreślić pierwszą kolumnę (oś x) w porównaniu do wszystkich innych kolumn na osi y? Przypuszczam, że to całkiem proste, gdy obejrzę pierwszy problem, na który się natknę, ale jestem po prostu trochę nowy w R, więc wciąż owijam go w głowę.

Odpowiedz

11

Nie potrzeba dwie linie:

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

skali jak i Serial są już ustawione z nagłówkami w read.table.

także scale <- data[1] tworzy element z data.frame

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

natomiast scale z read.table jest wektorem

5 10 12 15 

a funkcja plot(scale, serial) spodziewa wektor zamiast data.frame, więc po prostu należy wykonać:

plot(scale, serial) 

Jedno podejście do kreślenia innych kolumn danych na osi 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") 

Istnieje prawdopodobnie lepsze sposoby osiągnięcia tego celu, ale to jest poza moją aktualną wiedzą R ....

+0

Jak powinna wyglądać jego fabuła()? –

+0

wystarczy użyć działki (skala, szeregowy) – luapyad

+0

Niestety, "skala" wydaje się być globalnym pewnego rodzaju. –

2

Jestem daleki od bycia ekspertem R, ale myślę, że trzeba data.frame:

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

Czyni przynajmniej działka coś na mojej konfiguracji R!

Po otrzymaniu porady w odpowiedzi na pytanie Luapada, wpadłem na to. I przemianowany nagłówka "skalę":

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 

następnie:

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

Spróbuj tego:

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

można połączyć 4 działki w jedną grafikę za pomocą matplot (dane [1], dane [2,5], typ = "b") lub z indywidualnymi komendami wydruku poprzedzonymi układem (macierz (c (1,2) , 3,4), 2,2, byrow = TRUE)) – bubaker

5

Jestem nowy w badania, ale jeśli chcesz narysować skalę w porównaniu z wszystkimi innymi kolumn w jednej działki, łatwo iz jakiegoś elegancji :) do druku lub prezentacji, ty może używać pakietów Prof. Hadleya Wickhama ggplot2 & przekształcić.

Montaż:

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

rysowanie przykład:

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) 

Można również użyć punktów (geom=”points”), wybrać różne kolory i kształty dla różnych zmiennych punktów (colours=variable or shape=variable), ustawić oś ustaw indywidualne opcje dla każdej linii itp.

Link do online documentation.

7

W przykładzie

plot(scale, serial) 

nie zadziała, ponieważ scale i serial są zarówno ramki danych, na przykład

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

Można spróbować następujących sposobów i używać points(), gdy działki zostały wytworzone, aby wykreślić pozostałych kolumn. Uwaga: użyłem parametru ylim w plot, aby uwzględnić zakres w trzeciej kolumnie.

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

Dzięki! To w końcu rozwiązało mój problem. –

0

Jest sposób prosty-R o wykreślenie go:

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

Korzystanie z tego skryptu, wystarczy wpisać:

r -cdps, -k1:2 foo.csv 

Aby uzyskać wykres chcesz . Ustaw go w trybie pełnym (-v), aby zobaczyć odpowiedni skrypt R.

0
data <- read.table(...) 
plot(data$scale,data$serial)