web-dev-qa-db-fra.com

Tracer des données simples dans R

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.

19
Chris Bunch

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

12
luapyad

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

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 .

5
zzr

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

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 );
2
anon
data <- read.table(...)
plot(data$scale,data$serial)
0
Tong Gao

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.

0
Tom