Я работал над довольно сложной диаграммой в R. У меня есть каркас с поверхностью и точками, распределенными по всему пространству X, Y, Z (например, под поверхностью и над ней).
Проблема в том, что построенные точки не "выглядят" так, как будто они находятся под поверхностью.
Я пытаюсь выяснить, как лучше всего визуализировать этот график, чтобы точки выгляделипод поверхностью.Некоторые примеры кода для каркаса и облака взяты здесь: R-List Posting
Код в примере:
library(lattice)
surf <-
expand.grid(x = seq(-pi, pi, length = 50),
y = seq(-pi, pi, length = 50))
surf$z <-
with(surf, {
d <- 3 * sqrt(x^2 + y^2)
exp(-0.02 * d^2) * sin(d)
})
g <- surf
pts <- data.frame(x =rbind(2,2,2), y=rbind(-2,-2,-2), z=rbind(.5,0,-.5))
wireframe(z ~ x * y, g, aspect = c(1, .5),
drape=TRUE,
scales = list(arrows = FALSE),
pts = pts,
panel.3d.wireframe =
function(x, y, z,
xlim, ylim, zlim,
xlim.scaled, ylim.scaled, zlim.scaled,
pts,
...) {
panel.3dwire(x = x, y = y, z = z,
xlim = xlim,
ylim = ylim,
zlim = zlim,
xlim.scaled = xlim.scaled,
ylim.scaled = ylim.scaled,
zlim.scaled = zlim.scaled,
...)
xx <-
xlim.scaled[1] + diff(xlim.scaled) *
(pts$x - xlim[1]) / diff(xlim)
yy <-
ylim.scaled[1] + diff(ylim.scaled) *
(pts$y - ylim[1]) / diff(ylim)
zz <-
zlim.scaled[1] + diff(zlim.scaled) *
(pts$z - zlim[1]) / diff(zlim)
panel.3dscatter(x = xx,
y = yy,
z = zz,
xlim = xlim,
ylim = ylim,
zlim = zlim,
xlim.scaled = xlim.scaled,
ylim.scaled = ylim.scaled,
zlim.scaled = zlim.scaled,
...)
})
Глядя на мой пример, точки в точках фактически находятся на вертикальной линии, где X, Y = (2, -2), а z - от 0,5 до -5.
Однако, к моемуглаз, третья точка не выглядит так, как будто она находится под поверхностью, ей кажется, что она находится в координатах (2, -3,0).
Неужели это только мой глаз неправильно интерпретирует это?
Есть ли у кого-нибудь предложения о том, как сделать мои очки более "трехмерными"?Возможно, приглушить цвет точки, чтобы она выглядела «под поверхностью», используя какую-то прозрачность на поверхности?
Я попытался сделать цвета точек разными (красный для поверхности, синий дляпод поверхностью), но это не очень помогает графику.