Ich mache regelmäßig alle Arten von Streudiagrammen in R mit dem plot
Befehl.
Manchmal beide, manchmal nur eine der Plotachsen in wissenschaftlicher Notation. Ich verstehe nicht, wann R die Entscheidung trifft, zur wissenschaftlichen Notation zu wechseln. Überraschenderweise werden häufig Zahlen gedruckt, die kein vernünftiger Mensch in wissenschaftlicher Notation schreiben würde, wenn ein Plot beschriftet wird, beispielsweise 5 als 5e + 00. Nehmen wir an, Sie haben eine Log-Achse von bis zu 1000, die wissenschaftliche Notation ist mit solch "kleinen" Zahlen nicht gerechtfertigt.
Ich möchte dieses Verhalten unterdrücken, ich möchte immer, dass R ganzzahlige Werte anzeigt. Ist das möglich?
Ich habe es versucht, options(scipen=10)
aber dann beginnt es, 5,0 anstelle von 5 zu schreiben, während auf der anderen Achse 5 immer noch 5 usw. ist. Wie kann ich reine Ganzzahlwerte in meinen R-Plots haben?
Ich verwende R 2.12.1 unter Windows 7.
Antworten:
Verwenden Sie
options(scipen=5)
oder eine andere ausreichend hohe Zahl. Die Option scipen bestimmt, wie wahrscheinlich es ist, dass R in die wissenschaftliche Notation wechselt. Je höher der Wert, desto weniger wahrscheinlich ist es, dass es wechselt. Stellen Sie die Option vor dem Erstellen Ihres Diagramms ein. Wenn die wissenschaftliche Notation noch vorhanden ist, setzen Sie sie auf eine höhere Zahl.quelle
scipen
? Hast du es versuchtscipen=5
?Sie können Ihre Achsenbeschriftungen verwenden
format
oderformatC
ähm formatieren.Versuchen Sie es mit ganzen Zahlen
x <- 10 ^ (1:10) format(x, scientific = FALSE) formatC(x, digits = 0, format = "f")
Wenn die Zahlen in tatsächliche Ganzzahlen konvertierbar sind (dh nicht zu groß), können Sie auch verwenden
formatC(x, format = "d")
Wie Sie die Beschriftungen auf Ihre Achse bringen, hängt vom verwendeten Plotsystem ab.
quelle
plot()
plot
Kontrolle über die Achse haben, lesen Sie die andere Antwort in diesem Thread: stackoverflow.com/a/5968136/168747 (Zeile beginnt mitaxis(
.Sie können dafür den
axis()
Befehl verwenden, z.x <- 1:100000 y <- 1:100000 marks <- c(0,20000,40000,60000,80000,100000) plot(x,y,log="x",yaxt="n",type="l") axis(2,at=marks,labels=marks)
gibt:
BEARBEITEN: Wenn Sie alle im gleichen Format haben möchten, können Sie die Lösung von @Richie verwenden, um sie zu erhalten:
x <- 1:100000 y <- 1:100000 format(y,scientific=FALSE) plot(x,y,log="x",yaxt="n",type="l") axis(2,at=marks,labels=format(marks,scientific=FALSE))
quelle
?format
, sehen Sie, dass eine Zeichenfolge mit den Notationen zurückgegeben wird. Wenn Sie neu laden, überschreiben Sie die Zeichenfolge mit den ursprünglichen Werten.format()
setzt kein Formatattribut, sondern generiert Text. Daher die Verwendung als Wert für das Argumentlabels
scientific = FALSE
Teil dieser Antwort / der Dokumentation noch nie gesehen ? 😭format(x, scientific = FALSE, trim = TRUE, big.mark = ',')
ist ein LebensverändererVersuche dies. Ich habe absichtlich verschiedene Teile herausgebrochen, damit Sie Dinge bewegen können.
library(sfsmisc) #Generate the data x <- 1:100000 y <- 1:100000 #Setup the plot area par(pty="m", plt=c(0.1, 1, 0.1, 1), omd=c(0.1,0.9,0.1,0.9)) #Plot a blank graph without completing the x or y axis plot(x, y, type = "n", xaxt = "n", yaxt="n", xlab="", ylab="", log = "x", col="blue") mtext(side=3, text="Test Plot", line=1.2, cex=1.5) #Complete the x axis eaxis(1, padj=-0.5, cex.axis=0.8) mtext(side=1, text="x", line=2.5) #Complete the y axis and add the grid aty <- seq(par("yaxp")[1], par("yaxp")[2], (par("yaxp")[2] - par("yaxp")[1])/par("yaxp")[3]) axis(2, at=aty, labels=format(aty, scientific=FALSE), hadj=0.9, cex.axis=0.8, las=2) mtext(side=2, text="y", line=4.5) grid() #Add the line last so it will be on top of the grid lines(x, y, col="blue")
quelle
Sie könnten Gitter versuchen :
require(lattice) x <- 1:100000 y <- 1:100000 xyplot(y~x, scales=list(x = list(log = 10)), type="l")
quelle
Das
R
graphics
Paket verfügt über die FunktionaxTicks
, die die Tick-Positionen der Ticks zurückgibt, die die Funktionenaxis
undplot
automatisch setzen würden. Die anderen Antworten auf diese Frage definieren die Häkchenpositionen manuell, was in einigen Situationen möglicherweise nicht bequem ist.myTicks = axTicks(1) axis(1, at = myTicks, labels = formatC(myTicks, format = 'd'))
Ein minimales Beispiel wäre
plot(10^(0:10), 0:10, log = 'x', xaxt = 'n') myTicks = axTicks(1) axis(1, at = myTicks, labels = formatC(myTicks, format = 'd'))
Es gibt auch einen
log
Parameter in deraxTicks
Funktion, aber in dieser Situation muss er nicht eingestellt werden, um die richtige Position der logarithmischen Achse zu erhalten.quelle
Normalerweise reicht es aus, die Achsgrenze @ max Ihrer Variablen einzustellen
a <- c(0:1000000) b <- c(0:1000000) plot(a, b, ylim = c(0, max(b)))
quelle