/ / Dati 3D con ggplot - r, ggplot2, 3d, contorno

Dati 3D con ggplot - r, ggplot2, 3d, contorno

Ho dati nel seguente formato:

x <- seq(from = 0.01,to = 1, by = 0.01)
y <- seq(from = 0.01,to = 1, by = 0.01)

xAxis <- x/(1+x*y)
yAxis <- x/(1+x*y)

z <- (0.9-xAxis)^2 + (0.5-yAxis)^2

df <- expand.grid(x,y)
xAxis <- df$Var1/(1+df$Var1*df$Var2)
yAxis <- df$Var2/(1+df$Var1*df$Var2)

df$x <- xAxis
df$y <- yAxis
df$z <- z

Vorrei tracciare i dati te (x, y, z) come grafici di superficie e di contorno, eventualmente interpolando i dati per ottenere una figura il più possibile liscia.

Cercando ho raggiunto il akima pacchetto che fa l'interpolazione:

im <- with(df,interp(x,y,z))

Sto riscontrando problemi nel tracciare i dati con questa uscita. Idealmente mi piacerebbe usare ggplot2 dato che voglio aggiungere cose alla trama originale.

Grazie!

risposte:

1 per risposta № 1

Sono un po 'perplesso su quello che stai cercando, ma che ne dici di qualcosa del genere?

im <- with(df, akima::interp(x, y, z, nx = 1000, ny = 1000))
df2 <- data.frame(expand.grid(x = im$x, y = im$y), z = c(im$z))

ggplot(df2, aes(x, y, fill = z)) +
geom_raster() +
viridis::scale_fill_viridis()

inserisci la descrizione dell'immagine qui


0 per risposta № 2

Per i grafici di contorno, utilizzo il pacchetto "rgl". Ciò consente la manipolazione in tempo reale della trama per avere la migliore visione.

library("rgl")

x <- seq(from = 0.01,to = 1, by = 0.01)
y <- seq(from = 0.01,to = 1, by = 0.01)

#z <- (0.9-xAxis)^2 + (0.5-yAxis)^2

df <- expand.grid(x,y)
xAxis <- df$Var1/(1+df$Var1*df$Var2)
yAxis <- df$Var2/(1+df$Var1*df$Var2)

df$z <- (0.9-xAxis)^2 + (0.5-yAxis)^2

surface3d(x=x, y=y, z=df$z, col="blue", back="lines")
title3d(xlab="x", zlab="z", ylab="y")
axes3d(tick="FALSE")

Il pacchetto rgl è paragonabile al pacchetto ggplot2 per personalizzare la trama finale. La spaziatura della griglia di 0,01 è più che abbastanza vicina per questo tipo di superficie liscia.