2015-10-07 5 views
0

Je suis capable de tracer des données et tout semble fonctionner. Le seul problème est que R semble décider si des marqueurs de ligne sont insérés ou non. J'ai plusieurs ensembles de données différents, pour l'ensemble de données avec 1500 l'intrigue fonctionne bien et je peux voir les marqueurs. Tout autre ensemble de données, tous avec plus de 3000 points, l'intrigue ignore tous les marqueurs et seule la ligne peut être vue. Ci-dessous vous pouvez voir le code utilisé pour tracer les données et l'exemple des figures. Ma question est, comment puis-je m'assurer que R tracera les lignes avec des marqueurs? Est-ce que je fais quelque chose de mal?Les marqueurs de ligne (pch) ne sont pas affichés pour les grands ensembles de données en utilisant la commande R plot

Merci pour votre temps et votre aide.

png(filename="figures/all.normdtime.png", width=800, height=600) 
plot(ecdf(data1[,10]), col="blue", ann=FALSE,  pch=c(1,NA,NA,NA,NA,NA,NA,NA,NA), cex=2) 
lines(ecdf(data2[,10]), col="green", pch=c(3,NA,NA,NA,NA,NA,NA,NA,NA), cex=2) 
lines(ecdf(data3[,10]), col="red", pch=c(8,NA,NA,NA,NA,NA,NA,NA,NA), cex=2) 
lines(ecdf(data4[,10]), col="orange", pch=c(2,NA,NA,NA,NA,NA,NA,NA,NA), cex=2) 

title(xlab="Transfer rate (bytes/ms)") 
title(main="ECDF Normalized Download Time") 

dev.off() 

No markers, 21100 points plotted

With markers, 1400 points plotted

+0

Est-ce vraiment logique d'utiliser les pch personnalisés si vous avez autant de points? Je ne sais pas si c'est visuellement attrayant –

+0

Je diminue la quantité de temps que les points sont affichés, comme vous pouvez le voir de la partie pch = c (3, NA, NA, NA, NA, NA, NA, NA, NA). Mais tu m'as donné une idée. Je vais essayer de le diminuer encore plus et voir ce qui se passe :) –

+0

Aucune différence, toujours pas de marqueurs affichés. Bien que, le chiffre avec 1400 points semble meilleur. –

Répondre

0

Je voudrais essayer quelque chose comme ceci:

data1 <- dnorm(seq(-5,5,.001)) 
x <- ecdf(data1) 

plot(ecdf(data1), col="blue", ann=FALSE, pch=c(1,rep(NA,10000)), cex=2) 
points(x=knots(x)[seq(1,length(knots(x)),5)], y=ecdf(data1)(knots(x)[seq(1,length(knots(x)),5)]), col="red",pch=3) 

title(xlab="Transfer rate (bytes/ms)") 
title(main="ECDF Normalized Download Time") 

enter image description here

Le ECDF d'origine n'est pas visible depuis que nous avons comploté environ. 1500 points. Si vous voulez moins juste changer la valeur 5 à l'intérieur du x et des arguments y de points à un nombre plus grand-à-dire 100. Ensuite, nous avons ~ 70 points tracés:

enter image description here

Je n'ai pas vos données mais je pense que cela devrait fonctionner pour vous:

ecdf1 <- ecdf(data1[,10]) 
ecdf2 <- ecdf(data2[,10]) 
ecdf3 <- ecdf(data3[,10]) 
ecdf4 <- ecdf(data4[,10]) 

knots1 <- knots(ecdf1) 
knots2 <- knots(ecdf2) 
knots3 <- knots(ecdf3) 
knots4 <- knots(ecdf4) 

n <- 10 # every 10th point 

png(filename="figures/all.normdtime.png", width=800, height=600) 

plot(ecdf1, col="blue", ann=FALSE) 
points(x=knots1[seq(1,length(knots1),n)], y=ecdf1(knots1[seq(1,length(knots1),n)]), col="blue",pch=1) 

lines(ecdf2, col="green") 
points(x=knots2[seq(1,length(knots2),n)], y=ecdf2(knots2[seq(1,length(knots2),n)]), col="green",pch=3) 

lines(ecdf3, col="red",) 
points(x=knots3[seq(1,length(knots3),n)], y=ecdf3(knots3[seq(1,length(knots3),n)]), col="red",pch=8) 

lines(ecdf4, col="orange") 
points(x=knots4[seq(1,length(knots4),n)], y=ecdf4(knots4[seq(1,length(knots4),n)]), col="orange",pch=2) 


title(xlab="Transfer rate (bytes/ms)") 
title(main="ECDF Normalized Download Time") 

dev.off() 
+0

Génial! Fonctionne parfaitement pour moi. J'ai fait quelques changements parce que j'utilise le même code pour tracer des ensembles de données petits et grands et tout semble incroyable. Merci beaucoup pour l'aide et la réponse instantanée :) –

+0

Votre très bienvenue :) –