Як я можу придушити вертикальні лінії сітки в графіку ggplot2?


81

Я будую стовпчасту діаграму, для якої стовпчиків достатньо як ознаки горизонтального розміщення (х), тому я хотів би уникати малювання зайвих вертикальних ліній сітки.

Я розумію, як стилізувати малі та основні лінії сітки в opts (), але я не можу протягом усього життя зрозуміти, як придушити лише вертикальні лінії сітки.

library(ggplot2)

data <- data.frame(x = 1:10, y = c(3,5,2,5,6,2,7,6,5,4))

ggplot(data, aes(x, y)) +
  geom_bar(stat = 'identity') +
  opts(
    panel.grid.major = theme_line(size = 0.5, colour = '#1391FF'),
    panel.grid.minor = theme_line(colour = NA),
    panel.background = theme_rect(colour = NA),
    axis.ticks = theme_segment(colour = NA)
  )

На даний момент це схоже на те, що мені доведеться придушити всі лінії сітки, а потім намалювати їх назад за допомогою geom_hline (), що здається якоюсь болем (також, не зовсім зрозуміло, як я можу знайти галочку / основні позиції лінії сітки для подачі до geom_hline ().)

Будь-які думки будуть вдячні!

Відповіді:


24

Спробуйте використовувати

scale_x_continuous (розриви = NULL)

Це призведе до видалення всіх вертикальних ліній сітки, а також міток позначок по осі х.


9
Це вдалося, але тепер, як ви зауважили, у мене немає міток осей х, які мені потрібні - будь-які думки щодо того, як їх записати назад?
Тарек,

18
Нова версія говорить,Please use breaks = NULL to remove breaks in the scale. (Deprecated; last used in version 0.8.9)
Stat-R

scale_x_discrete(breaks = NULL)це той, який слід використовувати, коли змінна x дискретна.
luchonacho

4
Це не працює, коли я хотів би мати ярлики, але без перерв.
продуктовий магазин

@groceryheist не впевнений, що ви все ще шукаєте рішення, але я наткнувся на removeGrid з бібліотеки ggExtra тут: rdrr.io removeGrid , який видаляє лінії сітки, зберігаючи мітки осей.
ШКТ

176

Починаючи з ggplot2 0.9.2, це стало набагато простіше зробити за допомогою "тем". Тепер ви можете призначити теми окремо панелям.grid.major.x та panel.grid.major.y, як показано нижче.

#   simulate data for the bar graph
data <- data.frame( X = c("A","B","C"), Y = c(1:3) )    

#   make the bar graph
ggplot( data  ) +
    geom_bar( aes( X, Y ) ) +
    theme( # remove the vertical grid lines
           panel.grid.major.x = element_blank() ,
           # explicitly set the horizontal lines (or they will disappear too)
           panel.grid.major.y = element_line( size=.1, color="black" ) 
    )

Результат цього прикладу виглядає досить потворно, але він демонструє, як видалити вертикальні лінії, зберігаючи горизонтальні лінії та позначки по осі х.


2
можливо, це потребує оновлення: це дає меніError: stat_count() must not be used with a y aesthetic.
gaspar

1
Помилка все ще існує станом на 19.06.2020. На даний момент це рішення не працює.
Мег

1
@Meg не впевнений, що ви все ще шукаєте рішення, але я наткнувся на removeGrid з бібліотеки ggExtra тут: rdrr.io removeGrid , який видаляє лінії сітки, зберігаючи мітки осей.
ШКТ

4

Це залишає вам лише точки даних:

ggplot(out, aes(X1, X2)) + 
    geom_point() + 
    scale_x_continuous(breaks = NULL) + 
    scale_y_continuous(breaks = NULL) + 
    opts(panel.background = theme_blank()) + 
    opts(axis.title.x = theme_blank(), axis.title.y = theme_blank())

Можливо, це потрібно оновити. Коли я запускаю його, я отримую таку помилку: Помилка в opts (panel.background = theme_blank ()): не вдалося знайти функцію "opts". Зверніть увагу, що ця відповідь також не відповідає повторній відповіді OP, яка використовує "дані" (не "out"), а "x" і "y", а не "X1" і "X2".
Мег

1

Копіюючи мою відповідь із відповідного ланцюжка,

Для людей, які шукають це в 2020 році, я знайшов рішення у вигляді функції removeGrid з бібліотеки ggExtra тут rdrr.io> removeGrid

Я перевірив його на роботу з ggplot2 версії 3.3.0 та ggExtra версії 0.9, даючи мені галочки осі без ліній сітки.


1

Варіант 1:

data_df <- data.frame(x = 1:10, y = c(3,5,2,5,6,2,7,6,5,4))

ggplot(data_df, aes(x, y)) +
  geom_bar(stat = 'identity') +
  theme(panel.background = element_rect(fill = "white"))

Варіант 2:

data_df <- data.frame(x = 1:10, y = c(3,5,2,5,6,2,7,6,5,4))
    
ggplot(data_df, aes(x, y)) +
      geom_bar(stat = 'identity') +
      theme(
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        panel.grid.major.y = element_blank(),
        panel.grid.minor.y = element_blank()
      )
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.