Ich möchte eine Heatmap mit meiner eigenen mathematischen Funktion anstelle der Kerndichte-Schätzung darstellen. Aber im Moment kommt mein Problem von der Tatsache, dass ich diese Funktion mit persp()
3D nicht zeichnen kann, wenn meine & y
Achsen nicht quadriert sind. In der Tat hat die Heatmap eine Größe von 855 x 670.Wie werden 3D-Plotmatrizen in R nicht quadriert?
1) Gibt es eine Möglichkeit, dieses Problem zu lösen?
2) Und weiß jemand, wie man das in eine Heatmap umwandelt?
Vielen Dank im Voraus. Bitte finden Sie einen Teil meines Skripts unten.
---------------------------------------------- ---------------------------------
Hier sind zwei Funktionen, die wir benötigen:
rep.row <- function(x, n){
matrix(rep(x, each = n), nrow = n)
}
rep.col <- function(x, n){
matrix(rep(x, each = n), ncol = n, byrow = TRUE)
}
Diese liest ein Bild und extrahiert seine Abmessungen (dh, die Breite und Länge):
require('png')
png <- readPNG("myImage.png")
res <- dim(png)[2:1]
Informationen:
> dim(png)[2:1]
[1] 855 670
Diese sind feste Parameter:
alphaW <- 53
alphaH <- 31
a <- 2.3
I erstellen zwei Vektoren (d.h. e1
und e2
) basierend auf den Bildabmessungen. Daher ist e1
855-Zellen lang und e2
ist 670-Zellen lang. Dann verwende ich die obigen Funktionen, um zwei Matrizen (d. H. E1
und E2
) mit derselben Größe des Bildes (d. H. 855 x 670) zu erzeugen.
e1 <- seq(-alphaW, alphaW, length = res[1])
e2 <- seq(-alphaH, alphaH, length = res[2])
E1 <- rep.row(e1, res[2])
E2 <- rep.col(e2, res[1])
Eine Berechnung dieser beiden Matrizen verwendet, um eine dritte Matrix zu erstellen, SV
:
SV <- sqrt((a/(a + ((E1^2) + (E2^2)))))
Schließlich möchte ich eine 3D-Darstellung dieser Matrix zeichnen:
persp(x = e1, y = e2, z = SV,
col = "lightgoldenrod",
border = NA,
theta = 30,
phi = 15,
ticktype = "detailed",
ltheta = -120,
shade = 0.25)
Diese sollte etwas wie {this} ausgeben, jedoch erhalte ich:
Error in persp.default(e1, e2, SV, col = "lightgoldenrod", border = NA, :
argument 'z' incorrect
Es ist einfacher zu helfen, wenn Sie ein [reproduzierbares Beispiel] liefern (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r- Beispiel), für das keine Bilddateien benötigt werden, auf die wir keinen Zugriff haben. – MrFlick
Jede .png-Datei wäre eigentlich in Ordnung gewesen. Aber ich verstehe das Problem vollständig, dass man nicht einfach kopieren und einfügen kann. Mein Fehler. Mein Problem ist jedoch gelöst. Vielen Dank für Ihre Zeit. –