R 3D метки оси графика - PullRequest
       19

R 3D метки оси графика

2 голосов
/ 16 декабря 2011

Я строю трехмерную гистограмму в R, используя метод из рисунка 6.15 здесь .

Я установил масштаб = список (стрелка = F), так что у меня есть галочкаотметки вместо стрелок на каждой оси.

График выглядит нормально, но я хочу изменить метки оси.Моя ось х идет от 1-26, моя у от 1-24, а моя Z от 0-8E-6.В идеале я хотел бы, чтобы на каждом из дискретных значений x и y была одна метка, а затем на некотором разумном интервале по оси z.

Я пытался использовать опцию масштаба 'tick.number', но, кажется, он принимает только одно число или использует первое в списке, поэтому, если я установлю его на 26, я получу лишние отметкиось Y, а ось Z выглядит как мусор.

Я вижу, что в масштабах есть опции 'at' и 'метки', очень похожие на 2D-графики, но я не могу заставить их работать.Документы указывают, что это должен быть список векторов с местоположениями и метками для каждой панели, поэтому я попытался:

at = list(c(1:26), c(1:24), c(2*10^-6, 4*10^-6, 8*10^-6))

, но он жалуется:

(list) object cannot be coerces to type 'double'

Я предполагаю, что если я пойму, как использовать «at», тогда «label» должно стать ясным.

РЕДАКТИРОВАТЬ:

Вот пример кода:

library(latticeExtra)
Cg = 1:25
Cr = 1:25
freqs = rnorm(25, .5, .1)
cloud(freqs~Cg*Cr, xlim=c(27,-1), ylim=c(25,-1), panel.3d.cloud=panel.3dbars, par.settings=list(box.3d = list(col="transparent")), col.facet="grey",  scales=list(arrows=F))

Мои данные имеют разную длину осей X и Y, и заполнена не только диагональ, но она показываетосевая проблема.

Ответы [ 2 ]

1 голос
/ 16 декабря 2011

Эти результаты нуждаются в дальнейшей работе, но они действительно удовлетворяют ваш запрос и показывают, что имеется в виду, передавая аргументы в 'scale' в виде списка:

cloud(freqs~Cg*Cr, xlim=c(27,-1), ylim=c(25,-1),zlim=c(0,1), # needed to add zlim
   panel.3d.cloud=panel.3dbars, par.settings=list(box.3d = list(col="transparent")), 
   col.facet="grey",  
   scales=list(arrows=F, x=list(at = c(1:26), lab=c(1:26)) , 
                         y=list(at= c(1:24),  lab=c(1:24)),
                  z= list(rot=20,   # to prevent over-riding the tick marks
                          at= c(.2,.4,.8) ,      # data spans larger range
                          lab=c("2*10^-6  ", "4*10^-6  ", "8*10^-6  ") )
       )       )

enter image description here

Диапазон z просто не тот, который вы предлагали с этими маленькими значениями, поэтому вам нужно принять эту реальность.Если вы хотите изменить пропорции, я показал вам, как это сделать.

1 голос
/ 16 декабря 2011

Из документов cloud (lattice):

‘at’ дает вектор точки среза, где меняются цвета

Так что это должен быть вектор, а не список векторов. Ошибка, которую вы получаете, вызвана невозможностью преобразовать ваш список векторов в числовой:

at = list(c(1:26), c(1:24), c(2*10^-6, 4*10^-6, 8*10^-6))
> as.numeric(at)
Error: (list) object cannot be coerced to type 'double'

Параметр at описывает, где меняются цвета, аналогично levelplot. Так что это должен быть только один вектор.

...