Scatterplot3d - изменение размера многоугольника / плоскости - PullRequest
0 голосов
/ 23 января 2019

Это пример использования набора данных College из ISLR:

library(scatterplot3d)
library(ISLR)
attach(College)

s3d <- scatterplot3d(x=Top10perc, y=S.F.Ratio, z=PhD)
my.lm <- lm(Top10perc ~ S.F.Ratio + PhD)
plane <- s3d$plane3d(my.lm, lty.box = "solid", draw_polygon = TRUE)

The resulting plot

Я хочу увеличить размер серого многоугольника (плоскости).Из документации scatterplot3d:

Аргументы draw_lines и draw_polygon позволяют выбрать, следует ли представлять плоскость через отрезки или как сплошную поверхность соответственно.Список в polygon_args собирает аргументы для передачи в базовый вызов многоугольника, который рисует сплошную (или прозрачную) плоскость, если draw_polygon=TRUE.

Функция polygon:

polygon(x, y = NULL, density = NULL, angle = 45, border = NULL, col = NA, lty = par("lty"), ..., fillOddEven = FALSE)

Полагаю, мне нужно будет изменить x и y аргументы в базовом вызове polygon, но как я могу это сделать?Могу ли я получить к ним доступ?

1 Ответ

0 голосов
/ 23 января 2019

Я думаю, вы рисуете не ту плоскость.Документы немного скудны, но кажется, что s3d$plane3d предполагает, что z - переменная ответа, x - первый предиктор, а y - второй.Но даже если я изменю ваш код, чтобы использовать эти предположения, например,

library(scatterplot3d)
library(ISLR)

s3d <- with(College, scatterplot3d(z=Top10perc, x=S.F.Ratio, y=PhD))
my.lm <- lm(Top10perc ~ S.F.Ratio + PhD, data = College)
plane <- s3d$plane3d(my.lm, lty.box = "solid", draw_polygon = TRUE)

, я не получаю хороший график:

screenshot

Похоже, что scatterplot3d не обрезает плоскость на границах ограничительной рамки.

Я получаю лучшую плоскость, используя rgl,

library(rgl)
library(ISLR)

with(College, plot3d(x=Top10perc, y=S.F.Ratio, z=PhD))
my.lm <- lm(Top10perc ~ S.F.Ratio + PhD, data = College)
coefs <- coef(my.lm)
planes3d(a = -1, b = coefs["S.F.Ratio"], c = coefs["PhD"], d = coefs["(Intercept)"],
         alpha = 0.2)

screenshot

Сюжет можно поворачивать, но он не выглядит так же хорошо, как вывод scatterplot3d (на плоскости нет сетки), и его сложнее рисовать: поддержка не поддерживаетсяlm() приводит к rgl::planes3d, поэтому вам необходимо внимательно прочитать страницу справки.Может быть, кто-то еще может предложить лучшую альтернативу.

...