Подтвердить что ты не робот

Как увеличить пространство между полосками на штриховом участке в ggplot2?

Как увеличить пространство между полосками на графике в ggplot2?

4b9b3361

Ответ 1

Вы всегда можете играть с параметром width, как показано ниже:

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

Сравните следующие настройки для width:

alt text

До сих пор так хорошо. Теперь предположим, что у нас есть два фактора. Если вы хотите играть с равномерно расположенными соседними столбцами (например, при использовании space вместе с beside=TRUE в barplot()), это не так просто с помощью geom_bar(position="dodge"): вы можете изменить ширину бара, но не добавлять пробел в между соседними барами (и я не нашел удобного решения в Google). Я закончил с чем-то вроде этого:

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)

Вектор, используемый для оси $x $, "вводится" в data.frame, поэтому вы можете изменить внешний интервал, если хотите, а width позволяет управлять внутренним интервалом. Ярлыки для $x $-axis могут быть увеличены с помощью scale_x_discrete().

alt text

Ответ 2

Для пробела между барами факторов используйте

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

Ширина в geom_bar управляет шириной полосы по отношению к оси x, тогда как ширина в position_dodge регулирует ширину пространства, заданного для обеих полос, также по отношению к оси x. Играйте с шириной, чтобы найти тот, который вам нравится.

Ответ 3

Большое спасибо! У меня была такая же проблема, и вы помогли мне решить ее. Вместо использования geom_text для добавления X-меток я использовал scale_x_continuous (см. Ниже)

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)

заменен на

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

Ответ 4

Для пробела между строками POSIXlt вам нужно настроить ширину от количества секунд в день

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