R: xlim, ylim и zlim не работают для rgl.plot3d - PullRequest
3 голосов
/ 10 марта 2012

Я пытаюсь создать трехмерный точечный график, используя следующий скрипт:

d <- read.table(file='myfile.dat', header=F)
plot3d(
    d,
    xlim=c(0,20),
    ylim=c(0,20),
    zlim=c(0,10000),
    xlab='Frequency',
    ylab='Size',
    zlab='Number of subgraphs',
    box=F,
    type='s',
    size=0.5,
    col=d[,1]
)
lines3d(
    d,
    xlim=c(2,20),
    ylim=c(0,20),
    zlim=c(0,10000),
    lwd=2,
    col=d[,1]
)
grid3d(side=c('x', 'y+', 'z'))

Теперь по какой-то причине R игнорирует заданные мной пределы диапазона и использует произвольные значения, портя мой график. Я не получаю ошибку при запуске сценария. Кто-нибудь знает, что не так? При необходимости я также могу опубликовать изображение созданного сюжета. Файл данных приведен ниже:

myfile.dat

11    2    2
NA    NA    NA
10    2    2
NA    NA    NA
13    2    1
NA    NA    NA
15    2    1
NA    NA    NA
5    2    11
5    3    10
5    4    16
5    5    34
5    6    102
5    7    294
5    8    682
5    9    1439
5    10    2646
5    11    3615
5    12    2844
5    13    1394
NA    NA    NA
4    2    10
4    3    4
4    4    4
4    5    10
4    6    38
4    7    132
4    8    396
4    9    976
4    10    2121
4    11    4085
4    12    6261
4    13    6459
4    14    4238
4    15    1394
NA    NA    NA
7    2    3
NA    NA    NA
6    2    2
NA    NA    NA
9    2    8
9    3    6
9    4    4
9    5    5
NA    NA    NA
8    2    4
8    3    10
8    4    22
8    5    52
8    6    126
8    7    264
8    8    478
8    9    729
8    10    943
8    11    754
8    12    382
NA    NA    NA

Ответы [ 2 ]

2 голосов
/ 11 марта 2012

На странице справки ?plot3d написано: «Обратите внимание, что поскольку rgl в настоящее время не поддерживает отсечение, будут построены все точки, а« xlim »,« ylim »и« zlim »будут использоваться только для увеличения соответствующие диапазоны. " Таким образом, вам нужно ограничить данные на этапе ввода. (И вам нужно будет использовать segments3d вместо lines3d, если вы хотите только определенные диапазоны, которые находятся внутри построенного объема.)

d2 <- subset(d,  d[,1]>0 & d[,1] <20 & d[,2]>0 & d[,2] <20  & d[,3]>0 & d[,3]<10000 ])
plot3d(
    d2[, 1:3],  # You can probably use something more meaningful,
    xlim=c(0,20),
    ylim=c(0,20),
    zlim=c(0,10000),
    xlab='Frequency',
    ylab='Size',
    zlab='Number of subgraphs',
    box=F,
    type='s',
    size=0.5,
    col=d[,1]
)

(я заметил, что когда диапазон был c (0,10000), размер точек был почти невидим. И дальнейшие эксперименты показывают, что большое несоответствие в диапазонах вызовет дальнейшие трудности в поддержании диапазонов в 0 с нижней стороны, если вы увеличиваете размер до точки, где он виден. Если вы сделаете точки действительно большими, они расширяют диапазон, чтобы приспособиться к перекрытию за плоскостями x = 0 или y = 0.)

0 голосов
/ 10 марта 2012

Как сказал DWin, lines3d не обрабатывает * lim аргументы.На странице справки "... Свойства материала (см. Rgl.material), нормали и координаты текстуры (см. Rgl.primitive)."
Так что используйте другую функцию, или, возможно, вы могли бы извлечь существующие ограничения из вашего plot3d позвонить и использовать их для масштабирования ваших данных до начала печати?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...