Question

J'ai un fichier séparé par des virgules contenant du nom foo.csv 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 seconde colonne (axe y)? J'essaie ceci (à la lecture ce site ):

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

Mais je reçois cette erreur de retour:

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

Toute 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 aucune réponse pertinente. MISE À JOUR: Il se trouve, il fonctionne très bien si je saute les deux déclarations d'affectation au milieu. Toute idée pourquoi est-ce?

La deuxième question suit assez facilement après la première:

2) Comment tracer la première colonne (axe x) par rapport à toutes les autres colonnes sur l'axe des y? Je présume qu'il est assez facile une fois que je reçois dans le premier problème que je cours dans, mais je suis un peu nouveau à R, donc je suis toujours envelopper ma tête autour.

Était-ce utile?

La solution

Vous n'avez pas besoin les deux lignes:

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

échelle et de série sont déjà mis des en-têtes dans le read.table.

En outre scale <- data[1] crée un élément d'une 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 vecteur plutôt qu'une data.frame, vous avez juste besoin de faire

plot(scale, serial)

Une approche pour tracer les autres colonnes de données sur l'axe 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 qui est au-delà de mes connaissances actuelles de R ....

Autres conseils

Dans votre exemple,

plot(scale, serial) 

ne fonctionnera pas parce scale et serial sont les deux trames de données, par exemple.

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

Vous pouvez essayer la points() suivante et à l'utilisation, une fois que la parcelle a été généré, pour tracer les colonnes restantes. Attention, je le paramètre ylim dans plot pour accueillir 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 une parcelle, facile et avec une certaine élégance :) pour l'impression ou la présentation, vous pouvez utiliser les paquets de professeur Hadley Wickham ggplot2 et remodeler.

Installation:

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

Dessin 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”), choisir différentes couleurs ou formes pour différentes variables (points colours=variable or shape=variable), régler l'axe, définir les options individuelles pour chaque ligne, etc.

Lien vers documentation en ligne .

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 fait au moins intrigue quelque chose sur ma configuration R!

Après des conseils dans la réponse de luapyad, je suis venu avec cela. Je renomme 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

alors:

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

Essayez ceci:

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)

Il existe un moyen simple r de tracer le:

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

En utilisant ce script, il vous suffit de taper:

r -cdps, -k1:2 foo.csv

Pour obtenir le tracé que vous voulez. Mettez-le en mode verbose (-v) pour voir le script R correspondant.

data <- read.table(...)
plot(data$scale,data$serial)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top