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