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):
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.)
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 .
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()
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.
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"))
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)
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
Antworten:
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):
Verwenden Sie
par(xaxp = c(x1, x2, n))
oderplot(..., 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. Dementsprechendn+1
wird 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
.)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()
mitside
,at
undlabels
:axis(side = 1, at = v1, labels = v2)
. Unterside
Bezugnahme auf die Seite der Achse (1 = x-Achse, 2 = y-Achse) istv1
dies 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)v2
Ein Vektor, der die Beschriftungen für die angegebenen Häkchen enthält (muss dieselbe Länge haben wiev1
zc("group a", "group b", "group c")
. B. ). Sehen?axis
und meine aktualisierte Antwort auf einen Beitrag stats.stackexchange für ein Beispiel dieses Verfahrens .quelle
formatC
oderprettyNum
erstellen Sie Zeichenvektoren, an die übergeben werden solllabels
. ZB:formatC(seq(0,2,0.5), digits = 1, format = "f")
n
tatsächlich die Anzahl der Häkchen ist-1
. Ich wollte Häkchen von1
bis9
und musste setzen,xaxp = c(1, 9, 8)
sonst würde ich nicht das gewünschte Ergebnis erzielen.par(xaxp..)
. Es funktioniert nur, wenn ich es in dieplot(xaxp...)
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()
quelle
las
in? Par an, der einem Aufruf von hinzugefügt werden kannaxis()
und der die Ausrichtung der Tick-Beschriftungen steuert. ZBaxis(side = 1, at = c(1,5,10), las = 2)
. Vielleicht möchten Sie untersuchen, ob es eineaxis()
Funktion für Chron-Objekte gibt, oder die Verwendung der Datums- / Uhrzeitklassen von R in Betracht ziehen, die bereitsaxis()
Funktionen haben (z. B.axis.Date()
für die Klasse '"Datum"').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.quelle
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"))
quelle
flag
mityaxt=flag
ABER ein- und ausschalten, ABER der Trick ist, wenn Sie Standardbeschriftungen aktivieren, dann festlegenflag <- "s"
und wenn Sie die Standardbeschriftungen nicht verwenden möchten, verwenden Sieflag <- "n"
(Hinzufügen, da ich a während "s" zu finden)Ich habe gerade das Hmisc- Paket entdeckt:
library(Hmisc) plot(...) minor.tick(nx=10, ny=10) # make minor tick marks (without labels) every 10th
quelle