Как я могу подавить вертикальные линии сетки в графике ggplot2, сохраняя метки на оси x?
Это продолжение из этого вопроса, в котором я пытался подавить вертикальные линии сетки.
Решение, предоставленное learnr, состояло в том, чтобы добавить scale_x_continuous (breaks = NA), но это имело побочный эффект также подавления меток оси x. Я полностью счастлив написать ярлыки в руке, но мне не ясно, как определить, куда должны идти метки.
Другим вариантом является подавление всех линий сетки (с использованием опций (panel.grid.major = theme_blank()) или некоторых таких), а затем возврата только в основных горизонтальных сетках. Опять же, проблема здесь заключается в том, как выяснить, какие перерывы в графике для поставки geom_hline().
Итак, мои варианты:
- Подавлять вертикальные линии сетки и метки по оси x (с использованием scale_x_continuous (breaks = NA)) и снова добавить метки оси x.
- Подавление всех линий сетки (с помощью opts (panel.grid.major = theme_blank())) и добавьте основные горизонтальные линии сетки обратно в использование geom_hline().
Вот два варианта:
library(ggplot2)
data <- data.frame(x = 1:10, y = c(3,5,2,5,6,2,7,6,5,4))
# suppressing vertical gridlines and x-axis labels
# need to re-draw x-axis labels
ggplot(data, aes(x, y)) +
geom_bar(stat = 'identity') +
scale_x_continuous(breaks = NA) +
opts(
panel.grid.major = theme_line(size = 0.5, colour = '#1391FF'),
panel.grid.minor = theme_blank(),
panel.background = theme_blank(),
axis.ticks = theme_blank()
)
# suppressing all gridlines
# need to re-draw horizontal gridlines, probably with geom_hbar()
ggplot(data, aes(x, y)) +
geom_bar(stat = 'identity') +
scale_x_continuous(breaks = NA) +
opts(
panel.grid.major = theme_blank(),
panel.grid.minor = theme_blank(),
panel.background = theme_blank(),
axis.ticks = theme_blank()
)
Ответы
Ответ 1
Поскольку код в комментариях не отображается хорошо, поэтому я отправляю это как ответ. Вы можете сделать что-то подобное и добавить метки вручную с помощью geom_text()
:
ggplot(data, aes(x, y)) +
geom_bar(stat = 'identity') +
scale_x_continuous(breaks = NA) +
opts(
panel.grid.major = theme_line(size = 0.5, colour = '#1391FF'),
panel.grid.minor = theme_blank(),
panel.background = theme_blank(),
axis.ticks = theme_blank()
)+
geom_text(aes(label = x, y = -.3))
Ответ 2
Ответы выше не будут работать в ggplot2 версии 0.9.2.1 и выше. К счастью, теперь есть более простой способ сделать это, как описано в ответ на другой вопрос: fooobar.com/questions/126072/....
Ответ 3
Вы можете сделать это, отредактировав grob
напрямую, попробуйте:
grid.remove(gPath("panel.grid.minor.x.polyline"),grep=T)
grid.remove(gPath("panel.grid.major.x.polyline"),grep=T)
Он удалит ваши вертикальные линии. У меня просто проблемы с использованием функции внутри функции, потому что я предполагаю, что она работает только при печати ggplot.
Но если это не ваш случай, и вам просто понадобится графический редактор, он будет работать.
Ответ 4
Я нашел это решение во время поиска по этой проблеме. Я еще не пробовал.
http://wiki.stdout.org/rcookbook/Graphs/Axes%20(ggplot2)/
Вам нужно немного прокрутить список.
Бест,
Феликс