J'ai écrit un code pour tracer des données de densité pour les variations d'un test A/B. Je voudrais améliorer le visuel en ombrant (avec le remplissage étant légèrement transparent) la zone en dessous de chaque courbe. J'utilise actuellement matplot, mais comprendre ggplot pourrait être une meilleure option.r tracé de densité - aire de remplissage sous courbe
Des idées? Merci.
# Setup data frame - these are results from an A/B experiment
conv_data = data.frame(
VarNames = c("Variation 1", "Variation 2", "Variation 3") # Set variation names
,NumSuccess = c(1,90,899) # Set number of successes/conversions
,NumTrials = c(10,100,1070) # Set number of trials
)
conv_data$NumFailures = conv_data$NumTrials - conv_data$NumSuccess # Set number of failures [no conversions]
num_var = NROW(conv_data) # Set total number of variations
plot_col = rainbow(num_var) # Set plot colors
get_density_data <- function(n_var, s, f) {
x = seq(0,1,length.out=100) # 0.01,0.02,0.03...1
dens_data = matrix(data = NA, nrow=length(x), ncol=(n_var+1))
dens_data[,1] = x
# set density data
for(j in 1:n_var) {
# +1 to s[], f[] to ensure uniform prior
dens_data[,j+1] = dbeta(x, s[j]+1, f[j]+1)
}
return(dens_data)
}
density_data = get_density_data(num_var, conv_data$NumSuccess, conv_data$NumFailures)
matplot(density_data[,1]*100, density_data[,-1], type = "l", lty = 1, col = plot_col, ylab = "Probability Density", xlab = "Conversion Rate %", yaxt = "n")
legend("topleft", col=plot_col, legend = conv_data$VarNames, lwd = 1)
Ce produit le tracé suivant:
J'ai écrit un [blog sur les régions d'ombrage sous une courbe] (http://www.fromthebottomoftheheap.net/2013/01/11/shading-r egions-under-a-curve /) comme ça. Dans votre cas, vous voulez remplir toute la région afin de le simplifier un peu. Essentiellement, vous voulez utiliser 'polygon()' pour dessiner la zone ombrée, puis peut-être dessiner les lignes sur le dessus. Si j'ai de la chance et que personne n'y a répondu avant que je rentre à la maison, je fournirai une réponse appropriée. –
Gavin, super blog. J'ai répondu à ma propre question en passant à ggplot, mais votre message a également répondu à ma question par un autre moyen. Si vous postez comme réponse, je marquerai votre réponse acceptée. – cometrico