Jak mogę ukryć pionowe linie siatki na wykresie ggplot2?


81

Tworzę wykres słupkowy, dla którego słupki wystarczają jako wskazania poziomego (x) umieszczenia, więc chciałbym uniknąć rysowania zbędnych pionowych linii siatki.

Rozumiem, jak stylizować drugorzędne i główne linie siatki w opts (), ale do końca życia nie mogę wymyślić, jak wyłączyć tylko pionowe linie siatki.

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)
  )

W tym momencie wygląda na to, że będę musiał stłumić wszystkie linie siatki, a następnie narysować je z powrotem za pomocą funkcji geom_hline (), co wydaje się być rodzajem bólu (również, nie jest do końca jasne, jak mogę znaleźć tik / główne pozycje linii siatki do podania do geom_hline ().)

Wszelkie myśli będą mile widziane!

Odpowiedzi:


24

Spróbuj użyć

scale_x_continuous (przerwy = NULL)

Spowoduje to usunięcie wszystkich pionowych linii siatki, a także etykiet znaczników osi X.


9
To wystarczyło, ale teraz, jak zauważyłeś, nie mam etykiet osi X, których potrzebuję - jakieś przemyślenia, jak je z powrotem zapisać?
Tarek

18
Nowa wersja mówi: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)jest tym, który ma być używany, gdy zmienna x jest dyskretna.
luchonacho

4
To nie działa, gdy chciałbym mieć etykiety, ale bez przerw.
sklep spożywczy

@groceryheist nie jestem pewien, czy nadal szukasz rozwiązania, ale natknąłem się na removeGrid z biblioteki ggExtra tutaj: rdrr.io removeGrid , która usuwa linie siatki zachowując etykiety osi.
SHKT,

176

Od wersji 0.9.2 ggplot2 stało się to znacznie łatwiejsze przy użyciu „motywów”. Możesz teraz przypisać motywy oddzielnie do panel.grid.major.x i panel.grid.major.y, jak pokazano poniżej.

#   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" ) 
    )

Wynik tego przykładu jest dość brzydki, ale pokazuje, jak usunąć pionowe linie, zachowując poziome linie i znaczniki osi X.


2
może to wymaga aktualizacji: daje mi toError: stat_count() must not be used with a y aesthetic.
gaspar

1
Błąd nadal występuje na dzień 19.06.2020. To rozwiązanie obecnie nie działa.
Meg,

1
@Meg nie jestem pewien, czy nadal szukasz rozwiązania, ale natknąłem się na removeGrid z biblioteki ggExtra tutaj: rdrr.io removeGrid , która usuwa linie siatki zachowując etykiety osi.
SHKT,

4

Pozostaje ci tylko punkty danych:

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())

Być może trzeba to zaktualizować. Kiedy go uruchamiam, pojawia się następujący błąd: Błąd w opts (panel.background = theme_blank ()): nie można znaleźć funkcji "opts". Zauważ, że ta odpowiedź również nie jest zgodna z odpowiedzią operacyjną, która używa "danych" (nie „out”) oraz „x” i „y”, a nie „X1” i „X2”.
Meg,

1

Kopiowanie mojej odpowiedzi z pokrewnego wątku,

Dla osób szukających tego w 2020 roku znalazłem rozwiązanie w postaci funkcji removeGrid z biblioteki ggExtra tutaj rdrr.io> removeGrid

Przetestowałem go pod kątem współpracy z ggplot2 w wersji 3.3.0 i ggExtra w wersji 0.9, dając mi zaznaczenia osi bez linii siatki.


1

Opcja 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"))

Opcja 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()
      )
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.