Как я могу подавить вертикальные линии сетки в графике 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)/

Вам нужно немного прокрутить список.

Бест,

Феликс