Je voudrais ajuster automatiquement les graphiques ggplot tout en traçant côte à côte.ajuster automatiquement les limites d'axe tout en traçant des parcelles séparées ensemble
library(ggplot2)
library(gridExtra)
set.seed(123)
freq <- sample(1:10, 7, replace = T)
labels <- c('AUS', 'NZ', 'ENG', 'SOC', 'PAK', 'SRI', 'IND')
value <- paste("i",1:10,sep='')
lab <- rep(unlist(lapply(1:length(freq), function(x) rep(labels[x],freq[x]))),2)
ival <- rep(unlist(lapply(1:length(freq), function(x) value[1:freq[x]])),2)
df <- data.frame(lab, ival, type=c(rep('Type1',42),rep('Type2',42)),val=runif(84,0,1))
Tracé des données générées en utilisant le processus aléatoire ci-dessus.
plotUng <- ggplot(df, aes(x=ival, y=val, col = type, group = type)) +
geom_line() +
geom_point(aes(x=ival, y=val)) +
facet_wrap(~lab, ncol=3) +
theme(axis.text.x=element_text(angle=45, vjust=0.3)) +
scale_x_discrete(limits=paste('i',1:10,sep=''))
regroupant maintenant les données lab
sur la base de certaines conditions. Maintenant, je voudrais générer une nouvelle intrigue basée sur les données groupées.
dfGrp <- df %>% mutate(lab = recode(lab, 'AUS' = 'A', 'NZ' = 'A', 'ENG' = 'A',
'SOC' = 'A', 'PAK' = 'B', 'SRI' = 'B')) %>%
group_by(lab, ival, type) %>% mutate(val = mean(val)-0.2) %>% ungroup() %>% distinct()
plotG <- ggplot(dfGrp, aes(x=ival, y=val, col = type, group = type)) +
geom_line() +
geom_point(aes(x=ival, y=val)) +
facet_wrap(~lab, ncol=3) +
theme(axis.text.x=element_text(angle=45, vjust=0.3)) +
scale_x_discrete(limits=paste('i',1:10,sep=''))
Traçage les side-by-side deux parcelles ci-dessus à titre de comparaison en utilisant grid.arrange
.
grid.arrange(plotUng, plotG, ncol=2)
Réglage des limites de l'axe y après une inspection manuelle de la parcelle ci-dessus que plotUng a des limites plus larges que plotG. Donc, ajusté les limites de plotG avec les limites de plotUng comme coord_cartesian(ylim = ggplot_build(plotUng)$layout$panel_ranges[[1]]$y.range)
.
grid.arrange(plotUng, plotG + coord_cartesian(ylim = ggplot_build(plotUng)$layout$panel_ranges[[1]]$y.range), ncol=2)
L'intrigue ci-dessus est comme prévu. Existe-t-il un moyen de le faire automatiquement (juste avec les objets de la parcelle) sans inspection manuelle, car il n'est pas toujours possible d'inspecter manuellement toutes les parcelles et d'ajuster les limites de l'axe en conséquence?
Merci pour une autre approche d'identifier les limites de l'axe y et en ajustant les parcelles en fonction des nouvelles limites. Je demandais des suggestions où l'existence des méthodes automatiques ferait le nécessaire. Je voulais dire seulement avec des objets de la parcelle, l'arrangement serait fait automatiquement en ajustant les limites. – Prradep
Désolé mais je ne comprends pas vraiment; que voulez-vous dire par "automatique"? –
Toutes mes excuses pour vous avoir répondu en retard. Je voulais dire sans calculer le 'lim_y' après que les parcelles ont été générées. Au lieu de saisir: un ensemble de parcelles (plus de 1); sortie: disposition des intrants avec des limites ajustées. Ici, le code change lorsque l'entrée change. Je demande s'il y a des approches où la sortie change seulement quand l'entrée est changée. J'espère que c'est clair maintenant. – Prradep