2009-05-18 16 views
18

Ich habe eine durch Kommata getrennte Datei mit dem Namen foo.csv folgende Daten enthalten:Plotten Einfache Daten in 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 

Ich habe im Wesentlichen zwei Fragen:

1) Wie kann ich plotten die erste Spalte (x- Achse) gegen die zweite Spalte (y-Achse)? Ich versuche, diese (aus this site lesen):

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

Aber ich bekomme diese Fehlermeldung zurück:

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

Jede Idee, was ich falsch mache? A quick Google search enthüllt jemand anderen mit dem gleichen Problem, aber keine relevante Antwort. UPDATE: Es stellt sich heraus, dass es funktioniert, wenn ich die beiden Anweisungen in der Mitte überspringe. Irgendeine Idee warum das ist?

Die zweite Frage folgt ziemlich leicht nach dem ersten:

2) Wie plotten wir die erste Spalte (x-Achse) gegen alle anderen Spalten auf der y-Achse? Ich nehme an, dass es ziemlich einfach ist, wenn ich das erste Problem, dem ich begegne, verstehe, aber ich bin nur ein bisschen neu für R, also bin ich immer noch dabei.

Antwort

11

Sie brauchen nicht die beiden Linien:

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

als Maßstab und Serien bereits aus den Header gesetzt in der read.table.

Auch scale <- data[1] schafft ein Element aus einem data.frame

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

während scale vom read.table ein Vektor

ist
5 10 12 15 

und die plot(scale, serial) Funktion erwartet Vektor eher als ein data.frame, so dass Sie nur zu tun

plot(scale, serial) 

Ein Ansatz die anderen Spalten von Daten auf der y-Achse aufgetragen:

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

Es gibt wahrscheinlich bessere Möglichkeiten, dies zu tun, aber das ist jenseits meiner aktuellen R Wissen ....

+0

Wie also sollte sein Aufruf plot() aussehen? –

+0

verwenden Sie einfach Plot (Skala, serielle) – luapyad

+0

Leider scheint "Skala" eine globale Art von einer Art zu sein. –

2

Ich bin weit davon entfernt ein R-Experte zu sein, aber ich glaube, Sie brauchen eine data.frame:

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

Es tut zumindest Grundstück etwas auf meinem R Setup!

Nach dem Rat in luapyad Antwort kam ich mit diesem. Ich benannte den Header "Skala":

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 

dann:

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

Versuchen Sie folgendes:

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

können Sie die 4 Diagramme in einer Grafik kombinieren, entweder mit Matplot (Daten [1], Daten [2,5], Typ = "b") oder mit den einzelnen Plotbefehlen mit Layout (Matrix (c (1,2)) , 3,4), 2,2, byrow = TRUE)) – bubaker

5

Ich bin neu in R, aber wenn Sie in einem Plot, einfach und mit etwas Eleganz :) für den Druck oder die Präsentation gegenüber allen anderen Spalten Maßstab zu zeichnen, Sie kann Prof. Hadley Wickhams Pakete ggplot2 & umformen.

Installation:

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

Zeichnung Ihr Beispiel:

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) 

Sie können auch Punkte verwenden (geom=”points”), wählen Sie verschiedene Farben oder Formen für verschiedene Variablen Punkte (colours=variable or shape=variable), passen Achse eingestellt individuelle Optionen für jede Linie usw.

Link zu online documentation.

7

In Ihrem Beispiel

plot(scale, serial) 

wird nicht funktionieren, weil scale und serial beiden Datenrahmen, z.B.

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

könnten Sie versuchen, die folgenden und verwenden points(), sobald die Handlung erzeugt wurde, um die verbleibenden Spalten zu zeichnen. Hinweis: Ich habe den Parameter ylim in plot verwendet, um den Bereich in der dritten Spalte zu berücksichtigen.

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

Danke! Das hat mein Problem endlich gelöst. –

0

Es gibt eine einfache-r so, wie es von der grafischen Darstellung:

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

das Skript verwenden, müssen Sie nur noch ein:

r -cdps, -k1:2 foo.csv 

das Grundstück erhalten Sie die gewünschten . Setzen Sie es in den ausführlichen Modus (-v), um das entsprechende R-Skript zu sehen.

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