Ggplot2 bar plot, пробел между дном геометрии и осью x не держит пространство выше
Когда я рисую гистограмму в ggplot2, я хотел бы уменьшить пространство между нижней частью баров и осью x до 0, но сохраним пространство над столбцами и поле графика. У меня есть взлом, чтобы сделать это ниже. Это грязно, и я хочу снова быть чистым. Есть ли способ достичь такого поведения без грязного маленького взлома?
По умолчанию (желаемое пространство выше, но не нужно места ниже баров):
ggplot(mtcars, aes(x=as.factor(carb))) +
geom_bar()
![enter image description here]()
Используйте расширение (нежелательное 0 пробел выше, но получилось 0 пробел ниже баров):
ggplot(mtcars, aes(x=as.factor(carb))) +
geom_bar() +
scale_y_continuous(expand = c(0,0))
![enter image description here]()
Dirty Hack (мне нравится, но его.. ну, грязный):
ggplot(mtcars, aes(x=as.factor(carb))) +
geom_bar() +
scale_y_continuous(expand = c(0,0)) +
geom_text(aes(x=1, y=10.3, label="Stretch it"), vjust=-1)
![enter image description here]()
Ответы
Ответ 1
Мне может не хватать то, что вы действительно хотите, но без использования geom_text
hack вы все равно можете установить пределы
ggplot(mtcars, aes(x = as.factor(carb))) +
geom_bar() +
scale_y_continuous(expand = c(0, 0), limits = c(0, 10.3))
# marginally cleaner
Ответ 2
Вы можете развернуть лимиты вручную, например. с помощью expand_limits(y=10.1)
или используйте этот трюк, чтобы добавить невидимый уровень с расширенными данными,
ggplot(mtcars, aes(x=as.factor(carb))) +
geom_bar() +
scale_y_continuous(expand = c(0,0)) +
geom_blank(aes(y=1.1*..count..), stat="bin")
Ответ 3
Потому что вам кажется, что с жесткой кодировкой вам удобнее...
ggplot(mtcars, aes(x = as.factor(carb))) +
geom_bar() +
coord_cartesian(ylim = c(0, 10.3))
Ответ 4
Начиная с ggplot2 3.0.0, существует expand_scale()
которую можно использовать с аргументом expand
чтобы сделать именно это. Вы определяете верхнее и нижнее расширение отдельно.
ggplot(mtcars, aes(x=factor(carb))) +
geom_bar() +
scale_y_continuous(expand = expand_scale(mult = c(0, .1)))
Ответ 5
Это автоматический способ создания промежутка вверху, но при этом удалить нижний интервал. Я использую 3% заполнения, так как вы жестко запрограммированы.
plot1 <- ggplot(mtcars, aes(x=as.factor(carb))) +
geom_bar()
plotInfo <- print(plot1)
yMax <- max(plotInfo$data[[1]]$ymax)
yLimitMax <- 1.03 * yMax
plot2 <- plot1 +
scale_y_continuous(expand = c(0,0),
limits = c(0,yLimitMax))
Если вы хотите удалить три линии между plot2
, просто напишите это в plot2
:
limits = c(0, 1.03 * max(print(plot1)$data[[1]]$ymax))