Come aumentare lo spazio tra le barre in un grafico a barre in ggplot2?

Come posso aumentare lo spazio tra le barre in un grafico a barre in ggplot2 ?

Puoi sempre giocare con il parametro width , come mostrato di seguito:

 df <- data.frame(x=factor(LETTERS[1:4]), y=sample(1:100, 4)) library(ggplot2) ggplot(data=df, aes(x=x, y=y, width=.5)) + geom_bar(stat="identity", position="identity") + opts(title="width = .5") + labs(x="", y="") + theme_bw() 

Confronta con le seguenti altre impostazioni per la width :

alt text

Fin qui tutto bene. Ora, supponiamo di avere due fattori. Nel caso in cui ti piacerebbe giocare con barre giustapposte equidistanti (come quando usi lo space insieme a beside=TRUE in barplot() ), non è così semplice usare geom_bar(position="dodge") : puoi cambiare la larghezza della barra, ma non aggiungere spazio tra le barre adiacenti (e non ho trovato una soluzione conveniente su Google). Ho finito con qualcosa del genere:

 df <- data.frame(g=gl(2, 1, labels=letters[1:2]), y=sample(1:100, 4)) x.seq <- c(1,2,4,5) ggplot(data=transform(df, x=x.seq), aes(x=x, y=y, width=.85)) + geom_bar(stat="identity", aes(fill=g)) + labs(x="", y="") + scale_x_discrete(breaks = NA) + geom_text(aes(x=c(sum(x.seq[1:2])/2, sum(x.seq[3:4])/2), y=0, label=c("X","Y")), vjust=1.2, size=8) 

Il vettore utilizzato per $ x $ -axis viene "iniettato" nel data.frame, in modo tale che si modifichi la spaziatura esterna se lo si desidera, mentre la width consente di controllare la spaziatura interna. Le etichette per l'asse $ x $ potrebbero essere migliorate usando scale_x_discrete() .

alt text

Utilizzare lo spazio tra le barre dei fattori

 ggplot(data = d, aes(x=X, y=Y, fill=F)) + geom_bar(width = 0.8, position = position_dodge(width = 0.9)) 

La larghezza in geom_bar controlla la larghezza della barra rispetto all’asse x mentre la larghezza in posizione_dodge controlla la larghezza dello spazio assegnato a entrambe le barre anche in relazione all’asse x. Gioca con la larghezza per trovare quello che ti piace.

Grazie mille chl! Ho avuto lo stesso problema e tu mi hai aiutato a risolverlo. Invece di usare geom_text per aggiungere le X-labels ho usato scale_x_continuous (vedi sotto)

 geom_text(aes(x=c(sum(x.seq[1:2])/2, sum(x.seq[3:4])/2), y=0, label=c("X","Y")), vjust=1.2, size=8) 

sostituito da

 scale_x_continuous(breaks=c(mean(x.seq[1:2]), mean(x.seq[3:4])), labels=c("X", "Y")) 

Per lo spazio tra le barre POSIXlt è necessario regolare la larghezza dal numero di secondi in un giorno

 # POSIXlt example: full & half width d <- data.frame(dates = strptime(paste(2016, "01", 1:10, sep = "-"), "%Y-%m-%d"), values = 1:10) ggplot(d, aes(dates, values)) + geom_bar(stat = "identity", width = 60*60*24) ggplot(d, aes(dates, values)) + geom_bar(stat = "identity", width = 60*60*24*0.5)