Wie kann ich die vertikalen Gitterlinien in einem ggplot2-Plot unterdrücken?


81

Ich erstelle ein Balkendiagramm, für das Balken als Hinweis auf die horizontale (x) Platzierung ausreichen. Daher möchte ich vermeiden, die überflüssigen vertikalen Gitterlinien zu zeichnen.

Ich verstehe, wie man die kleinen und großen Gitterlinien in opts () stylt, aber ich kann für mein ganzes Leben nicht herausfinden, wie man nur die vertikalen Gitterlinien unterdrückt.

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

An diesem Punkt sieht es so aus, als müsste ich alle Gitterlinien unterdrücken und sie dann mit geom_hline () zurückziehen, was wie ein Schmerz erscheint (außerdem ist nicht ganz klar, wie ich das Häkchen finden kann / Hauptgitterlinienpositionen, die an geom_hline () weitergeleitet werden sollen.)

Irgendwelche Gedanken wären dankbar!

Antworten:


24

Versuchen Sie es mit

scale_x_continuous (Pausen = NULL)

Dies würde alle vertikalen Gitterlinien sowie Markierungsbeschriftungen auf der x-Achse entfernen.


7
Das hat es geschafft, aber jetzt, wie Sie bemerkt haben, habe ich nicht die x-Achsen-Beschriftungen, die ich brauche - irgendwelche Gedanken darüber, wie ich sie zurückschreiben soll?
Tarek

18
Neue Version sagt,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)ist diejenige, die verwendet werden soll, wenn die x-Variable diskret ist.
Luchonacho

2
Dies funktioniert nicht, wenn ich Etiketten haben möchte, aber keine Pausen.
Lebensmittelgeschäft

@groceryheist nicht sicher, ob Sie noch nach einer Lösung suchen, aber ich bin hier auf removeGrid aus der ggExtra-Bibliothek gestoßen : rdrr.io removeGrid , das die Gitterlinien entfernt, während die Achsenbeschriftungen beibehalten werden.
SHKT

175

Ab ggplot2 0.9.2 ist die Verwendung von "Themen" viel einfacher geworden . Sie können jetzt Themen wie panel.grid.major.x und panel.grid.major.y separat zuweisen, wie unten gezeigt.

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

Das Ergebnis dieses Beispiels sieht ziemlich hässlich aus, zeigt jedoch, wie die vertikalen Linien entfernt werden, während die horizontalen Linien und Häkchen auf der x-Achse erhalten bleiben.


2
Vielleicht braucht dies ein Update: Es gibt mirError: stat_count() must not be used with a y aesthetic.
Gaspar

Der Fehler besteht noch am 19.06.2020. Diese Lösung funktioniert derzeit nicht.
Meg

1
@Meg nicht sicher, ob Sie noch nach einer Lösung suchen, aber ich bin hier auf removeGrid aus der ggExtra-Bibliothek gestoßen : rdrr.io removeGrid , das die Gitterlinien entfernt, während die Achsenbeschriftungen beibehalten werden.
SHKT

4

Dies lässt Sie nur mit den Datenpunkten:

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

Möglicherweise muss dies aktualisiert werden. Wenn ich es ausführe, erhalte ich den folgenden Fehler: Fehler in opts (panel.background = theme_blank ()): Funktion "opts" konnte nicht gefunden werden Beachten Sie, dass diese Antwort auch nicht der reproduzierbaren Antwort des OP folgt, die "data" verwendet (nicht) "out") und "x" und "y", nicht "X1" und "X2".
Meg

0

Kopieren meiner Antwort aus einem verwandten Thread,

Für Leute, die dies im Jahr 2020 nachschlagen, habe ich eine Lösung in Form der removeGrid-Funktion aus der ggExtra-Bibliothek hier rdrr.io> removeGrid gefunden

Ich habe getestet, dass es mit ggplot2 Version 3.3.0 und ggExtra Version 0.9 funktioniert, wodurch ich Achsen-Ticks ohne Gitterlinien bekomme.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.