Как увеличить пространство между полосками на графике в ggplot2?
Как увеличить пространство между полосками на штриховом участке в ggplot2?
Ответ 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
:
До сих пор так хорошо. Теперь предположим, что у нас есть два фактора. Если вы хотите играть с равномерно расположенными соседними столбцами (например, при использовании 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()
.
Ответ 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)