Ich baue ein R-Paket Weibull Plots angezeigt werden (unter Verwendung von graphics::plot
) in R. Das Grundstück hat ein logtransformierten x -Achse und a-Weibull umgewandelt y -Achse (mangels einer besseren Beschreibung). Die Zwei-Parameter-Weibull-Verteilung kann somit als eine gerade Linie auf diesem Diagramm dargestellt werden.Wie skaliert/transformiere ich Graphics :: Plot() Achsen mit irgendeiner Transformation, nicht nur logarithmisch (für Weibull-Plots)?
Die logarithmische Transformation der x -Achse ist so einfach wie die log="x"
Parameter plot()
oder curve()
Zugabe. Wie kann ich die y -Achs-Transformation in einer eleganten Art und Weise liefern, so dass alle graphischen Darstellungen auf meiner Achse-transformierten Handlung funktionieren? Um zu zeigen, was ich brauche, führen Sie den folgenden Beispielcode:
## initialisation ##
beta <- 2;eta <- 1000
ticks <- c(seq(0.01,0.09,0.01),(1:9)/10,seq(0.91,0.99,0.01))
F0inv <- function (p) log(qweibull(p, 1, 1))
# this is the transformation function
F0 <- function (q) exp(-exp(q))
# this is the inverse of the transformation function
weibull <- function(x)pweibull(x,beta,eta)
# the curve of this function represents the weibull distribution
# as a straight line on weibull paper
weibull2 <- function(x)F0inv(weibull(x))
Zunächst ein Beispiel für eine Weibull-Verteilung mit beta=2
und eta=1000
auf einer regelmäßigen, nicht transformierte Grundstück:
## untransformed axes ##
curve(weibull ,xlim=c(100,1e4),ylim=c(0.01,0.99))
abline(h=ticks,col="lightgray")
Dieses Diagramm ist nutzlos für Weibull-Analyse. Hier ist meine derzeit implementierte Lösung, die die Daten mit der Funktion F0inv()
transformiert und die y -Achse des Diagramms ändert. Beachten Sie, dass ich F0inv()
für alle y -Achse Daten verwenden muss.
## transformed axis with F0inv() ##
curve(weibull2,xlim=c(100,1e4),ylim=F0inv(c(0.01,0.99)),log="x",axes=F)
axis(1);axis(2,at=F0inv(ticks),labels=ticks)
abline(h=F0inv(ticks),col="lightgray")
Dies funktioniert, aber das ist nicht sehr benutzerfreundlich: wenn der Benutzer Anmerkungen hinzufügen möchte, muss man immer F0inv()
verwenden:
text(300,F0inv(0.4),"at 40%")
I festgestellt, dass Sie eine Lösung für mein Problem mit ggplot2
und Skalen erreichen können, aber ich möchte nicht zu einem Grafikpaket, wenn ab Gelegentlich notwendig, da viel anderer Code neu geschrieben werden muss.
## with ggplot2 and scales ##
library(ggplot2)
library(scales)
weibull_trans <- function()trans_new("weibull", F0inv, F0)
qplot(c(100,1e4),xlim=c(100,1e4),ylim=c(0.01,0.99),
stat="function",geom="line",fun=weibull) +
coord_trans(x="log10",y = "weibull")
Ich glaube, wenn ich dynamisch den Code für die Anwendung der logarithmische Transformation mit meinem eigenen ersetzen könnte, würde mein Problem gelöst werden.
Ich habe versucht, weitere Informationen von Googling "R-Achse Transformation", "R Benutzer Koordinaten", "R-Achse Skalierung" ohne nützliche Ergebnisse zu finden. Fast alles, was ich gefunden habe, behandelt logarithmische Skalen.
ich versuchte, in plot()
zu prüfen, wie die log="x"
Parameter funktioniert, aber der entsprechende Code für plot.window
ist in C geschrieben - nicht meine stärkste Seite überhaupt.
ich daran interessiert sein wird, wenn jemand mit aufkommt eine bessere Lösung, aber ich denke, Sie haben den relevanten Grund abgedeckt; Ich glaube nicht, dass Sie es besser machen werden - außerhalb von 'ggplot2' kenne ich keine Systeme für die generische Achsentransformation. –
Danke, dass Sie sich die Zeit genommen haben, zu antworten. In der Zwischenzeit kam ich zu dem gleichen Schluss, es sieht so aus, als ob ich gezwungen wäre, ggplot2 zu benutzen. – user2257135