Hoe vergroot je de ruimte tussen de staven in een staafdiagram in ggplot2?

Hoe kan ik de ruimte tussen de staven in een staafdiagram vergroten in ggplot2?


Antwoord 1, autoriteit 100%

Je kunt altijd spelen met de parameter width, zoals hieronder weergegeven:

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()

Vergelijk met de volgende andere instellingen voor width:

Tot nu toe, zo goed. Stel nu dat we twee factoren hebben. Als je wilt spelen met gelijk verdeelde, naast elkaar geplaatste balken (zoals bij het gebruik van spacesamen met beside=TRUEin barplot()), is het niet zo eenvoudig met geom_bar(position="dodge"): je kunt de balkbreedte wijzigen, maar geen ruimte toevoegen tussen aangrenzende balken (en ik vond geen handige oplossing op Google). Ik eindigde met zoiets:

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)

De vector die voor de $x$-as wordt gebruikt, wordt “geïnjecteerd” in het data.frame, zodat u de buitenste afstand kunt wijzigen als u dat wilt, terwijl widthhet mogelijk maakt om de binnenafstand te regelen . Labels voor de $x$-as kunnen worden verbeterd door scale_x_discrete()te gebruiken.


Antwoord 2, autoriteit 75%

Gebruik voor spatie tussen factorbalken

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

De breedte in geom_bar regelt de staafbreedte in relatie tot de x-as terwijl de breedte in position_dodge de breedte bepaalt van de ruimte die aan beide staven wordt gegeven, ook in relatie tot de x-as. Speel wat met de breedte om er een te vinden die je leuk vindt.


Antwoord 3, autoriteit 3%

Heel erg bedankt chl.! Ik had hetzelfde probleem en jij hebt me geholpen het op te lossen. In plaats van geom_text te gebruiken om de X-labels toe te voegen, gebruikte ik scale_x_continuous (zie hieronder)

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)

vervangen door

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

Antwoord 4

Voor ruimte tussen POSIXlt-balken moet je de breedte aanpassen vanaf het aantal seconden in een dag

# 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) 

Other episodes