Voglio disegnare trame di violino orizzontale (perché le mie etichette sono lunghe). I miei vincoli di progettazione sono:horizontal ggplot2 :: geom_violin senza coord_flip
- molteplici sfaccettature (
f1
), categorie multiple per ogni sfaccettatura (f2
) (quindi voglio usareaes(x=f2)
efacet_wrap(~f1)
- diverse scale per sfaccettatura (quindi voglio
scales="free"
) - 4 diverse sfaccettature che voglio organizzare tramite
facet_wrap()
(che escludono alcuni trucchi sfaccettatura)
Purtroppo scales="free"
e coord_flip()
sono attualmente (e per il prossimo futuro) incompatibili.
Le risposte a questo related question suggeriscono (1) l'hacking di una nuova geom orizzontale; (2) scambiare x
e (che come indicato qui funziona solo con geomi simmetrici come i grafici a dispersione); (3) rinunciare e andare con il layout convenzionale.
Idee?
set.seed(101)
library("plyr")
dd <- expand.grid(f1=factor(1:2),
f2=paste("inconveniently long label",1:2))
dd2 <- ddply(dd,c("f1","f2"),
function(x)
data.frame(y=rnorm(100,
mean=10*(as.numeric(x$f2)),
sd=10^(as.numeric(x$f1)))))
library("ggplot2")
Le mie scelte sembrano essere (1) con scale="free"
, scomodi (orizzontali) Etichette:
ggplot(dd2,aes(x=f2,y=y))+facet_wrap(~f1,scale="free")+geom_violin()
(2) con coord_flip()
, scale scomode
ggplot(dd2,aes(x=f2,y=y))+facet_wrap(~f1)+geom_violin()+coord_flip()
Cercando entrambi (ggplot(dd2,aes(x=f2,y=y))+facet_wrap(~f1,scale="free")+geom_violin()+coord_flip()
) dà
ggplot2 attualmente non supporta scale gratis con un coord non cartesiano o coord_flip.
Altre idee:
- Non ci sono versioni orizzontali in modo esplicito di alcuni GEOMs (
geom_errorbarh
); Ho potuto incidere il miogeom_violinh
... - V'è una certa discussione GEOMs orizzontali in un pull request on ggplot2
- This (rather old) example utilizza sfaccettature +
geom_ribbon()
per incidere una trama violino, ma consuma sfaccettature, che lo rende incompatibile confacet_wrap()
Per quel che vale, questo è ciò che la mia vera trama sembra (al momento):
La domanda di lanciare questi si trova ancora, ma sarebbe ruotare le etichette degli assi x o romperle su spazi (vale a dire, 'gsub ("\\ s +", "\ n", "sconvenientemente lungo etichetta")') soddisfare il tuo obiettivo previsto? –
Non mi piace ruotarli ma potrei essere disposto a rompere o abbreviare loro ... –