Frage

Ich habe eine durch Kommata getrennte Datei mit dem Namen foo.csv folgende Daten enthalten:

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 plotte die erste Spalte (x-Achse) gegen die zweite Spalte (y-Achse)? Ich versuche, diese (von dieser Seite 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 mache ich falsch? Eine schnelle Google-Suche jemand anderes mit dem gleichen Problem enthüllt aber keine relevante Antwort. UPDATE: Es stellt sich heraus, es funktioniert gut, wenn ich die beiden Zuweisungsanweisungen in der Mitte überspringen. Jede Idee, warum das so 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, es ist ziemlich einfach, wenn ich um das erste Problem, komme ich in laufen lasse, aber ich bin nur ein bisschen neu zu R so bin ich immer noch meinen Kopf herum gewickelt wird.

War es hilfreich?

Lösung

Sie brauchen nicht die beiden Zeilen:

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

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

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 ist ein Vektor

5 10 12 15

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

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 ....

Andere Tipps

In Ihrem Beispiel

plot(scale, serial) 

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

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

Sie könnten versuchen, die folgenden und Verwendung points(), sobald die Handlung erzeugt wurde, um die verbleibenden Spalten zu zeichnen. Beachten Sie, ich verwendet, um die ylim Parameter in plot den Bereich in der dritten Spalte zu werden.

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

Ich bin neu in R, aber wenn Sie Skala gegenüber allen anderen Spalten in einem Grundstück, einfach und mit etwas Eleganz :) für den Druck oder die Präsentation zeichnen möchten, können Sie Prof. Hadley Wickham-Pakete ggplot2 & umformen verwenden.

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, stellen individuelle Optionen für jede Zeile etc.

Link zur Online-Dokumentation .

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 Handlung etwas auf meinem R Setup!

Nach der Beratung in luapyad Antwort kam ich mit dieser nach oben. 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 );

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)

Es ist eine einfache Art und Weise r es Plotten:

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

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

r -cdps, -k1:2 foo.csv

Um das Grundstück Sie wollen. Legen Sie es in dem ausführlichen Modus (-v) den entsprechenden R-Skript zu sehen.

data <- read.table(...)
plot(data$scale,data$serial)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top