2017-12-06 6 views
1

logarithmisch ist das ich tue folgende:Extend eine Achsgrenze auf -1, wenn die Achse in R

x = c(0, 1, 2, 3, 4, 5) 
y = x^2 
plot(x, y, log="y") 

Was ich will, ist, dass der Graph zeigt mir auch den Streupunkt bei (x, y) = (0, 0).

Ich weiß, dass log(0) = -Inf. Dies wird der Fall sein, wenn ich log(x) mache, aber hier mache ich nicht log(x). Stattdessen ändere ich einfach den Maßstab der y-Achse, um logarithmisch zu sein. Daher muss ich wissen, ob es für mich auch möglich ist, den Streupunkt (x, y) = (0, 0) anzuzeigen.

+3

Ersetzen Sie 'y [1]' durch '0.1' und plotten Sie. Dann ersetze es durch '0.0001' oder' 0.000000001' und versuche es erneut - hoffentlich wird dies zeigen, warum dein ursprüngliches Ziel nicht erreicht werden kann - es gibt einen unendlichen Abstand zwischen 1 und 0 auf einer logarithmischen Skala. – Marius

Antwort

2

Nein, was Sie fragen, ist mathematisch unmöglich, weil log(0) = -Inf. Der Punkt (0, 0) kann nicht auf einer logarithmischen Skala angezeigt werden.

Eine logarithmische Skala wird erstellt, indem die Datenwerte logarithmisch transformiert und die Werte an den Achsen-Ticks potenziert werden. Um beispielsweise den Wert 100 in einem log-10-Maßstab darzustellen, loggen Sie zuerst 100 in log10(100) = 2 um und transformieren dann den entsprechenden Achsenstrich von 2 in 10^2 = 100. Um den Wert 0 in einem logarithmischen Plot darzustellen, müssen Sie daher log10(0) berechnen, selbst wenn der entsprechende Achsenstrich 10^-Inf = 0 wäre.

2

Wenn Sie eine nichtlineare Y-Achse haben möchten und nicht unbedingt eine logarithmische Skala, dann können Sie etwas folgen, was unten steht.

# transfrom y-values 
ny <- sqrt(y) 
# plot the transformed values 
plot(x, ny, yaxt='n', ylab = "y") 
# label the y-axis 
axis(side = 2, at = ny, labels = y) 

enter image description here

Auch, wenn Sie wissen, was Sie log (0) mit, ersetzen möchten, dann können Sie das tun, über ny, aber ich weiß nicht raten log Maßstab zu verwenden, wenn es liegt Null.