Erhöhen Sie die Anzahl der Achsen-Ticks

188

Ich generiere Diagramme für einige Daten, aber die Anzahl der Ticks ist zu gering. Ich benötige mehr Genauigkeit beim Lesen.

Gibt es eine Möglichkeit, die Anzahl der Achsen-Ticks in ggplot2 zu erhöhen?

Ich weiß, dass ich ggplot anweisen kann, einen Vektor als Achsen-Ticks zu verwenden, aber ich möchte die Anzahl der Ticks für alle Daten erhöhen. Mit anderen Worten, ich möchte, dass die Tick-Nummer aus den Daten berechnet wird.

Möglicherweise macht ggplot dies intern mit einem Algorithmus, aber ich konnte nicht finden, wie es funktioniert, um es nach meinen Wünschen zu ändern.

João Daniel
quelle

Antworten:

186

Sie können die Standardskalen von ggplots überschreiben, indem Sie scale_x_continuousund / oder ändern scale_y_continuous. Beispielsweise:

library(ggplot2)
dat <- data.frame(x = rnorm(100), y = rnorm(100))

ggplot(dat, aes(x,y)) +
  geom_point()

Gibt Ihnen Folgendes:

Geben Sie hier die Bildbeschreibung ein

Und das Überschreiben der Waage kann Ihnen Folgendes geben:

ggplot(dat, aes(x,y)) +
  geom_point() +
  scale_x_continuous(breaks = round(seq(min(dat$x), max(dat$x), by = 0.5),1)) +
  scale_y_continuous(breaks = round(seq(min(dat$y), max(dat$y), by = 0.5),1))

Geben Sie hier die Bildbeschreibung ein

Wenn Sie wollen einfach „Zoom“ in auf einem bestimmten Teil eines Komplotts, Blick auf xlim()und ylim()ist. Gute Einsichten finden Sie auch hier , um die anderen Argumente zu verstehen.

Verfolgungsjagd
quelle
4
Eigentlich wäre es der Punkt, das byArgument auf verschiedene Zahlenskalen zu "verallgemeinern" , dh 0,5 ist ein guter Wert für diese Daten, deren Bereich c (-3,3) ist, aber es ist kein guter Bereich für Daten, deren Bereich ist c (0,5000). Gibt es eine Funktion, die es berechnet?
João Daniel
3
@ JoãoDaniel - Ich meine, ggplot macht dabei automatisch einen anständigen Job. Wenn es keine zufriedenstellenden Ergebnisse liefert, bin ich mir nicht sicher, ob es eine eingebaute Funktion gibt, die etwas anderes bietet. Der gewünschte Detaillierungsgrad ist spezifisch für Ihre Handlung, aber denken Sie vielleicht über einige Testfälle und den angegebenen Detaillierungsgrad nach, um ein Muster zu identifizieren. Wenn dies ein Boxplot wäre, wäre so etwas wie max-min/30ein ziemlich häufiger "Eimer". Größe ... aber das kann ein guter Ausgangspunkt für Sie sein oder auch nicht.
Chase
4
Was ist mit kategorialen Werten auf der x-Achse wie Monaten des Jahres für Zeitreihen?
Scott Davis
3
@ScottDavis werfen Sie einen Blick auf den Link . Sie können verwendenscale_x_date(date_breaks = "5 months", date_minor_breaks = "1 months")
Markus Hauschel
Zum Zoomen coord_cartesiansollte statt verwendet werden xlim. stackoverflow.com/questions/25685185/…
qwr
165

Basierend auf Daniel Krizians Kommentar können Sie auch die pretty_breaksFunktion aus der scalesBibliothek verwenden, die automatisch importiert wird:

ggplot(dat, aes(x,y)) + geom_point() +
scale_x_continuous(breaks = scales::pretty_breaks(n = 10)) +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10))

Sie müssen lediglich die Anzahl der gewünschten Ticks eingeben n.


Eine etwas weniger nützliche Lösung (da Sie die Datenvariable erneut angeben müssen), können Sie die integrierte prettyFunktion verwenden:

ggplot(dat, aes(x,y)) + geom_point() +
scale_x_continuous(breaks = pretty(dat$x, n = 10)) +
scale_y_continuous(breaks = pretty(dat$y, n = 10))
slhck
quelle
15
Dies ist eindeutig die beste Antwort! Btw ggplot importiert bereits scales, fügt die Funktionen jedoch nicht Ihrem Namespace hinzu. Sie können sie daher ohne den Import als aufrufen scales::pretty_breaks(n = 10).
während
63

Sie können ein Funktionsargument scaleangeben, und ggplot verwendet diese Funktion, um die Tick-Positionen zu berechnen.

library(ggplot2)
dat <- data.frame(x = rnorm(100), y = rnorm(100))
number_ticks <- function(n) {function(limits) pretty(limits, n)}

ggplot(dat, aes(x,y)) +
  geom_point() +
  scale_x_continuous(breaks=number_ticks(10)) +
  scale_y_continuous(breaks=number_ticks(10))
Gedränge
quelle
81
Keine Notwendigkeit, eine eigene Funktion zu erstellen number_ticks. Dies wurde bereits in implementiert pretty_breaks {scales}. Daher: ggplot(dat, aes(x,y)) + geom_point() + scale_x_continuous(breaks=pretty_breaks(n=10)) + scale_y_continuous(breaks=pretty_breaks(n=10))
Daniel Krizian
11
@ Daniel Krizian: 1) braucht require(scales)2) dies scheint zu verhindern, dass meine Pausen in wissenschaftlicher Notation erscheinen, daher wird 1e6 in 1000000 geändert ??
smci
6
Sie können Basis-Rs prettyohne das scalesPaket verwenden. Geben Sie einfach die Werte als Argument an. Zum Beispiel:(breaks=pretty(dat$x, n=10))
Molx
@smci Wenn ggplot2 funktioniert, ist eine Waage verfügbar. ggplot2 funktioniert ohne Waage nicht.
Claus Wilke
5

Die kommende Version v3.3.0 von bietet ggplot2die Option n.breaks, automatisch Pausen für scale_x_continuousund zu generierenscale_y_continuous

    devtools::install_github("tidyverse/ggplot2")

    library(ggplot2)

    plt <- ggplot(mtcars, aes(x = mpg, y = disp)) +
      geom_point()

    plt + 
      scale_x_continuous(n.breaks = 5)

Geben Sie hier die Bildbeschreibung ein

    plt + 
      scale_x_continuous(n.breaks = 10) +
      scale_y_continuous(n.breaks = 10)

Geben Sie hier die Bildbeschreibung ein

Tung
quelle
4

Zusätzlich,

ggplot(dat, aes(x,y)) +
geom_point() +
scale_x_continuous(breaks = seq(min(dat$x), max(dat$x), by = 0.05))

Funktioniert für gruppierte oder diskret skalierte x-Achsendaten (dh Rundung nicht erforderlich).

bmc
quelle