2016-10-11 1 views
0

Je souhaite placer des tracés de distribution de différentes variables dans un seul fichier image. Chaque placette de distribution (sous-placette) contient des groupes similaires séparés par des couleurs.tracés de distribution multiples (variables différentes) en tant que facettes dans la même parcelle

Actuellement j'utilise le traçage de chaque variable séparément en utilisant ggplot. Ensuite, j'utilise grid.arrange pour combiner tous les sous-placards ensemble, je peux représenter toute la distribution.

(code de l'exemple ci-dessous)

#plot1 
plot_min_RTT <- ggplot(house_total_year, aes(x=min_RTT, colour = ISP)) + 
geom_density(adjust = 1/2,alpha=0.1, size = 2) 

#plot2 
plot_MaxMSS <- ggplot(house_total_year, aes(x=MaxMSS, colour = ISP)) + 
geom_density(adjust = 1/2,alpha=0.1, size = 2) 

#plot3 
plot_send_buffer_size <- ggplot(house_total_year, aes(x=send_buffer_size, colour = ISP)) + 
geom_density(adjust = 1/2,alpha=0.1, size = 2) 

#plot4 
plot_maxSpeed <- ggplot(house_total_year_filtered, aes(x=download_speed_max_month, colour = ISP)) + 
geom_density(adjust = 1/2,alpha=0.1, size = 2) 

#combine 
grid.arrange(plot_min_RTT,plot_MaxMSS,plot_send_buffer_size,plot_maxSpeed) 

Comme on le voit, les variables utilisées pour l'axe des x de chaque sous-parcelle est différent. Mais tout a les mêmes variables groupées (ISP). Je me suis retrouvé avec une seule parcelle ci-dessous:

What I currently have

Cependant, ce que je veux vraiment est d'avoir une seule légende (ISP) pour toutes les intrigues secondaires. Je pensais utiliser la fonction facet_wrap de ggplot mais je suis toujours aux prises avec ça. S'il vous plaît aider.

Toute suggestion serait appréciée!

Merci! :)

+1

Les données doivent être en une seule trame de données avec une variable qui peut être utilisé dans 'facet_wrap' pour créer les différentes parcelles. – Haboryme

+1

lisez ceci, puis le chapitre "Ajouter une légende commune pour plusieurs graphiques ggplot2": http://www.sthda.com/english/wiki/ggplot2-easy-way-to-mix-multiple-graphs-on-the-same -page-r-logiciel-et-visualisation de données –

+0

Merci @J_F! ça marche! –

Répondre

0

Vous n'avez fourni aucune donnée reproductible, donc j'ai utilisé le data.frame mpg fourni avec le paquetage ggplot.

# Subset the data 
d <- mpg[, c(1, 3:5)] 
# your ISP == manufacturer 
# Than transform the data to long format as stated already in the comments using reshape function melt 
library(reshape2) 
d_long <- melt(d) 
head(d_long) 
    manufacturer variable value 
1   audi displ 1.8 
2   audi displ 1.8 
3   audi displ 2.0 
4   audi displ 2.0 
5   audi displ 2.8 
6   audi displ 2.8 

# Now plot the data using the variable column in facet_grid for the layout. 
# scales = "free_x" is used for vairable dependend x-axis scales. 
ggplot(d_long, aes(x = value, colour = manufacturer)) + 
    geom_density() + 
    facet_grid(~ variable, scales = "free_x") + 
    theme_bw() 
# Instead of using facet_grid you can try 
# facet_wrap(~ variable, scales = "free_x", ncol = 2) 
# to arrange the plots row- and colwise as your needs are. The scaling of both axis can also changed. 
ggplot(d_long, aes(x = value, colour = manufacturer)) + 
    geom_density() + 
    facet_wrap(~ variable, scales = "free", ncol = 2) + 
    theme_bw() 

enter image description here

+0

merci @Jimbou, le seul problème avec cette solution est l'impossibilité d'avoir différentes étiquettes d'axe Y pour chaque sous-parcelle. –

+0

@TaraSutjarittham jeter un oeil à mes modifications. Pourquoi avez-vous besoin de différentes étiquettes y pour un tracé de densité? Ce devrait toujours être '' densité ''pour chaque parcelle. – Jimbou

+0

@Jumbou, désolé, je veux dire x-aixs :) –