J'ai un fichier séparé par des virgules nommé foo.csv
contenant les données suivantes:
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
J'ai essentiellement deux questions:
1) Comment tracer la première colonne (axe x) par rapport à la deuxième colonne (axe y)? J'essaye ceci (en lisant ce site ):
data <- read.table("foo.csv", header=T,sep=",")
attach(data)
scale <- data[1]
serial <- data[2]
plot(scale,serial)
Mais je récupère cette erreur:
Error in stripchart.default(x1, ...) : invalid plotting method
Une idée de ce que je fais mal? Un recherche rapide sur Google révèle quelqu'un d'autre avec le même problème mais sans réponse pertinente. MISE À JOUR: Il s'avère que cela fonctionne bien si je saute les deux instructions d'affectation au milieu. Une idée pourquoi c'est?
La deuxième question suit assez facilement après la première:
2) Comment puis-je tracer la première colonne (axe x) par rapport à toutes les autres colonnes sur l'axe y? Je suppose que c'est assez facile une fois que je contourne le premier problème que je rencontre, mais je suis juste un peu nouveau pour R, donc j'enveloppe toujours la tête.
Vous n'avez pas besoin des deux lignes:
scale <- data[1]
serial <- data[2]
comme l'échelle et la série sont déjà définies à partir des en-têtes dans le read.table
.
scale <- data[1]
Crée également un élément à partir d'un data.frame
data[1]
1 5
2 10
3 12
4 15
alors que scale
du read.table
est un vecteur
5 10 12 15
et la fonction plot(scale, serial)
attend un vecteur plutôt qu'un data.frame, donc il vous suffit de faire
plot(scale, serial)
Une approche pour tracer les autres colonnes de données sur l'axe des 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")
Il y a probablement de meilleures façons de le faire, mais cela dépasse mes connaissances actuelles en R ...
Dans votre exemple,
plot(scale, serial)
ne fonctionnera pas car scale
et serial
sont tous deux des trames de données, par exemple.
class(scale)
[1] "data.frame"
Vous pouvez essayer ce qui suit et utiliser points()
, une fois le tracé généré, pour tracer les colonnes restantes. Remarque, j'ai utilisé le paramètre ylim
dans plot
pour tenir compte de la plage dans la troisième colonne.
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')
Je suis nouveau dans R, mais si vous voulez dessiner l'échelle par rapport à toutes les autres colonnes dans un seul tracé, facile et avec une certaine élégance :) pour l'impression ou la présentation, vous pouvez utiliser les packages ggplot2 et remodeler du professeur Hadley Wickham.
Installation:
install.packages(“ggplot2”,dep=T)
install.packages(“reshape”,dep=T)
Dessinez votre exemple:
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)
Vous pouvez également utiliser des points (geom=”points”
), choisissez différentes couleurs ou formes pour différents points variables (colours=variable or shape=variable
), ajuster l'axe, définir des options individuelles pour chaque ligne, etc.
Lien vers documentation en ligne .
Essaye ça:
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)
Je suis loin d'être un expert en R, mais je pense que vous avez besoin d'un data.frame:
plot(data.frame(data[1],data[2]))
Il trace au moins quelque chose sur ma configuration R!
En suivant les conseils de Luapyad dans sa réponse, j'ai trouvé cela. J'ai renommé l'en-tête "échelle":
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
puis:
foo <- read.table("foo.csv", header=T,sep=",")
attach(foo)
plot( scaling, serial );
data <- read.table(...)
plot(data$scale,data$serial)
Il existe un moyen simple de le représenter:
https://code.google.com/p/simple-r/
En utilisant ce script, il vous suffit de taper:
r -cdps, -k1:2 foo.csv
Pour obtenir l'intrigue que vous voulez. Mettez-le en mode verbeux (-v) pour voir le script R correspondant.