2017-01-07 1 views
1

J'apprends le rbenchmark paquet à l'algorithme de référence et voir la performance dans l'environnement R. Cependant, lorsque j'ai augmenté l'entrée, les résultats de référence sont variés les uns par rapport aux autres. Pour montrer comment la performance de l'algorithme pour différentes entrées, la production graphique ou courbe est nécessaire. Je m'attends à avoir une ligne ou une courbe qui montre la différence de performance d'utiliser un nombre différent d'entrée. L'algorithme que j'ai utilisé, fonctionne O (n^2). In tracé, X axe montrent le nombre d'observation de l'entrée, Y axe montre le temps d'exécution respectivement.Comment puis-je rendre cela plus élégant en utilisant ggplo2? Quelqu'un peut-il me donner une idée pour générer l'intrigue souhaitée? Une idée s'il vous plaît?Comment puis-je tracer une sortie de référence?

Imaginons, ce sont les fichiers d'entrée:

foo.csv 
bar.csv 
cat.csv 

résultat de référence lorsque j'ai utilisé deux fichiers csv comme entrée:

df_2 <- data.frame(
    test=c("s3","s7","s4" ,"s1" ,"s2" ,"s5" ,"s6" ,"s9","s8"), 
    replications=c(10,10, 10, 10 ,10 ,10 ,10 ,10 ,10), 
    elapsed=c(0.23, 0.28, 0.53 , 0.80 , 4.12 , 8.57 , 8.81 ,20.16 ,24.53), 
    relative=c(1.000 , 1.217 , 2.304 , 3.478 , 17.913 , 37.261 , 38.304 , 87.652 ,106.652), 
    user.self=c(0.23, 0.28 , 0.53 , 0.61 , 4.13 , 8.55 , 8.80 ,18.06 ,19.08), 
    sys.self=c(0.00, 0.00 ,0.00, 0.00 ,0.00, 0.00 ,0.00 ,0.13, 0.51) 
) 

Cette fois, j'utilisé trois fichiers csv comme entrée:

df_3 <- data.frame(
    test=c("s3", "s7" ,"s4", "s1", "s5", "s6","s2", "s9","s8"), 
    replications=c(10,10, 10, 10 ,10 ,10 ,10 ,10 ,10), 
    elapsed=c(0.34 , 0.47 , 0.70 , 2.41 ,8.26 , 8.75 , 9.03, 28.78 ,36.56), 
    relative=c(1.000 , 1.382 , 2.059 , 7.088 , 24.294 , 25.735 , 26.559 ,84.647 ,107.529), 
    user.self=c(0.34 , 0.46 ,0.70 , 1.72 , 8.26 , 8.74 ,9.01, 26.24 ,30.95), 
    sys.self=c(0.00 ,0.00 ,0.00, 0.12, 0.00 ,0.00 ,0.00, 0.12 ,0.77) 
) 

Dans mon tracé souhaité, deux lignes ou courbes doivent être placées dans une grille.

Comment puis-je obtenir un graphique ou une courbe en utilisant le résultat de référence ci-dessus? Comment puis-je obtenir l'intrigue désirée qui montre la performance de l'algorithme dans R? Merci beaucoup

Répondre

2

Vous pouvez essayer (en supposant que s1, s2, s3, ... représentent différents tests, peut-être avec différents n, que vous voulez comparer, avec les résultats df_2 contre df_3):

library(reshape2) 
df_2 <- melt(df_2, id='test') 
df_3 <- melt(df_3, id='test') 
df_2$num_input <- 'two_input' 
df_3$num_input <- 'three_input' 
df <- rbind(df_2, df_3) 
library(ggplot2) 
ggplot(df, aes(test, value, group=num_input, col=num_input)) + geom_point() + geom_line() + facet_wrap(~variable) 

enter image description here

Si oui u veulent tracer elapsed contre test essayez ceci:

ggplot(df[df$variable=='elapsed',], aes(test, value, group=num_input, col=num_input)) + geom_point() + geom_line(lwd=2) + ylab('elapsed') + 
    theme(text=element_text(size=15)) 

enter image description here

Si vous voulez des images plus lisibles, essayez ceci:

ggplot(df, aes(test, value, group=num_input, col=num_input)) + geom_point() + geom_line(lwd=2) + facet_wrap(~variable) + 
    theme(text=element_text(size=15)) 

enter image description here

[edited] geom_smooth

ggplot(df[df$variable=='elapsed',], aes(test, value, group=num_input, col=num_input)) + 
    geom_point() + geom_smooth(span=0.7, se=FALSE) + ylab('elapsed') + 
    theme(text=element_text(size=15)) 

enter image description here

+0

Sandipan Cher, en ce qui concerne votre parcelle de sortie, si je l'intention d'avoir la parcelle pour '' elapsed' contre test', comment puis-je faire? Y a-t-il une chance de rendre la courbe plus lisse et plus audacieuse? Merci – Dan

+0

@Dan mis à jour selon vos besoins –

+0

Cher sandipan, si j'ai l'intention d'obtenir un tracé de courbe en fonction de votre sortie, comment puis-je faire cela? Je suis juste curieux de comparer l'intrigue de ligne avec d'autres. De plus, j'ai essayé de rendre l'intrigue lisse en utilisant 'geom_smooth()', semble quelque chose de mal à utiliser de cette façon. Une idée ? – Dan

1

Tout d'abord, nous créons une variable de regroupement.

df_2$set <- "set_1" 
df_3$set <- "set_2" 

Puis nous créons une variable pour le nombre de réplications.

df_2$n <- 1:length(df_2$replications) 
df_3$n <- 1:length(df_2$replications) 

nous traçons la liaison df_2 et df_3 par des lignes, créant ainsi une trame unique de données.

Cela va créer un tracé de ligne.

ggplot(rbind(df_2, df_3)) + 
    aes(as.factor(n), elapsed, color = set, group = set) + 
    geom_line() 

line plot

Cela va créer un tracé de ligne lisse, en utilisant loess comme méthode.

ggplot(rbind(df_2, df_3)) + 
    aes(as.factor(n), elapsed, color = set, group = set) + 
    geom_smooth(alpha = 0) 

smooth plot