Abstand der Häkchen auf der Achse eines Diagramms ändern?

Antworten:

95

Es gibt mindestens zwei Möglichkeiten, dies im Basisdiagramm zu erreichen (meine Beispiele gelten für die x-Achse, funktionieren jedoch für die y-Achse gleich):

  1. Verwenden Sie par(xaxp = c(x1, x2, n))oder plot(..., xaxp = c(x1, x2, n)), um die Position ( x1& x2) der extremen Häkchen und die Anzahl der Intervalle zwischen den Häkchen ( n) zu definieren. Dementsprechend n+1wird die Anzahl der Häkchen gezogen. (Dies funktioniert nur, wenn Sie keine logarithmische Skala verwenden. Informationen zum Verhalten mit logarithmischen Skalen finden Sie unter ?par.)

  2. Sie können das Zeichnen der Achse vollständig unterdrücken und die Häkchen später mit hinzufügen axis().
    Um das Zeichnen der Achse zu unterdrücken, verwenden Sie plot(... , xaxt = "n").
    Dann rufen Sie axis()mit side, atund labels: axis(side = 1, at = v1, labels = v2). Unter sideBezugnahme auf die Seite der Achse (1 = x-Achse, 2 = y-Achse) ist v1dies ein Vektor, der die Position der Ticks enthält (z. B. c(1, 3, 5)wenn Ihre Achse zwischen 0 und 6 liegt und Sie drei Markierungen wünschen) v2Ein Vektor, der die Beschriftungen für die angegebenen Häkchen enthält (muss dieselbe Länge haben wie v1z c("group a", "group b", "group c"). B. ). Sehen ?axisund meine aktualisierte Antwort auf einen Beitrag stats.stackexchange für ein Beispiel dieses Verfahrens .

Henrik
quelle
Gibt es eine Möglichkeit zu steuern, wie viele Dezimalstellen R für numerische Häkchen verwendet wird? Ich habe gerade Beschriftungen = c (0,0,0,5,1,0,1,5,2,0) ausprobiert, aber in der Grafik waren die Beschriftungen 0, 0,5, 1, 1,5 usw. Gibt es eine Möglichkeit, auf allen Beschriftungen die gleiche Anzahl von Dezimalstellen zu erhalten? Ich habe versucht, Beschriftungen = rund (seq (0,2,0,5), 1), aber die ganzen Zahlen hatten immer noch keine Dezimalstellen.
Eipi10
2
Probieren Sie Funktionen aus formatCoder prettyNumerstellen Sie Zeichenvektoren, an die übergeben werden soll labels. ZB:formatC(seq(0,2,0.5), digits = 1, format = "f")
Henrik
1
+1 hat schon eine Weile gesucht, um dies zu finden. Es stellt sich jedoch heraus, dass dies ntatsächlich die Anzahl der Häkchen ist -1. Ich wollte Häkchen von 1bis 9und musste setzen, xaxp = c(1, 9, 8)sonst würde ich nicht das gewünschte Ergebnis erzielen.
ThomasH
Bei mir funktioniert es nicht mit par(xaxp..). Es funktioniert nur, wenn ich es in dieplot(xaxp...)
Daniel Bonetti
31

Bei Basisgrafiken ist es am einfachsten, die Zeichenfunktionen daran zu hindern, Achsen zu zeichnen, und sie dann selbst zu zeichnen.

plot(1:10, 1:10, axes = FALSE)
axis(side = 1, at = c(1,5,10))
axis(side = 2, at = c(1,3,7,10))
box()
Gavin Simpson
quelle
Hallo, ich habe Datums- / Uhrzeitdaten auf der x-Achse (chron). In meinem Fall sollte dies meiner Meinung nach besser sein, als eine Zeile mit beispielsweise 25 vollständigen Datumsangaben zu schreiben. Was ist, wenn ich möchte, dass die Daten vertikal auf die x-Achse geschrieben werden, meine ich senkrecht. prost
skan
1
Sehen Sie sich den Grafikparameter lasin? Par an, der einem Aufruf von hinzugefügt werden kann axis()und der die Ausrichtung der Tick-Beschriftungen steuert. ZB axis(side = 1, at = c(1,5,10), las = 2). Vielleicht möchten Sie untersuchen, ob es eine axis()Funktion für Chron-Objekte gibt, oder die Verwendung der Datums- / Uhrzeitklassen von R in Betracht ziehen, die bereits axis()Funktionen haben (z. B. axis.Date()für die Klasse '"Datum"').
Gavin Simpson
6

Ich habe einen Datensatz mit der Zeit als x-Achse und der Intensität als y-Achse. Ich müsste zuerst alle Standardachsen mit Ausnahme der Achsenbeschriftungen löschen mit:

plot(Time,Intensity,axes=F)

Dann baue ich die Elemente der Handlung neu auf mit:

box() # create a wrap around the points plotted
axis(labels=NA,side=1,tck=-0.015,at=c(seq(from=0,to=1000,by=100))) # labels = NA prevents the creation of the numbers and tick marks, tck is how long the tick mark is.
axis(labels=NA,side=2,tck=-0.015)
axis(lwd=0,side=1,line=-0.4,at=c(seq(from=0,to=1000,by=100))) # lwd option sets the tick mark to 0 length because tck already takes care of the mark
axis(lwd=0,line=-0.4,side=2,las=1) # las changes the direction of the number labels to horizontal instead of vertical.

So at = c(...)gibt die Sammlung von Positionen der Skalenmarkierungen zu setzen. Hier möchte ich die Noten auf 0, 100, 200, ..., 1000 setzen. seq(from =...,to =...,by =...)Ich habe die Wahl zwischen Grenzwerten und Inkrementen.

Huy Nguyen
quelle
3

Und wenn Sie nicht möchten, dass R Dezimalstellen oder Nullen hinzufügt, können Sie verhindern, dass es die x-Achse oder die y-Achse oder beides mit ... axt zeichnet. Anschließend können Sie Ihre eigenen Häkchen und Beschriftungen hinzufügen:

plot(x, y, xaxt="n")
plot(x, y, yaxt="n")
axis(1 or 2, at=c(1, 5, 10), labels=c("First", "Second", "Third"))
javivr
quelle
Natürlich können Sie dies programmgesteuert mit einer Variablen flagmit yaxt=flag ABER ein- und ausschalten, ABER der Trick ist, wenn Sie Standardbeschriftungen aktivieren, dann festlegen flag <- "s"und wenn Sie die Standardbeschriftungen nicht verwenden möchten, verwenden Sie flag <- "n" (Hinzufügen, da ich a während "s" zu finden)
Clem Wang
3

Ich habe gerade das Hmisc- Paket entdeckt:

Enthält viele nützliche Funktionen für die Datenanalyse, allgemeine Grafiken, Dienstprogramme, Funktionen zum Berechnen der Stichprobengröße und -leistung, zum Importieren und Kommentieren von Datensätzen, zum Eingeben fehlender Werte, zum erweiterten Erstellen von Tabellen, zum Clustering von Variablen, zur Manipulation von Zeichenfolgen und zur Konvertierung von R-Objekten in LaTeX und HTML-Code und Neukodierung von Variablen.

library(Hmisc)    
plot(...)
minor.tick(nx=10, ny=10) # make minor tick marks (without labels) every 10th
Clem Wang
quelle