2011-12-16 2 views
2

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

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

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

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

Я вижу, что в масштабах есть опции 'at' и 'labels', как и для 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' then 'label' должно стать ясным.

EDIT:

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

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)) 

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

+0

Пожалуйста, добавьте воспроизводимый пример. Страница, на которую вы ссылаетесь, содержит несколько графиков, как для решетки, так и для ggplot2. Избегайте двусмысленности и добавляйте примерный набор данных. –

+0

Я отметил, что это была цифра 6.15 на связанной странице. – FabbyRob

ответ

1

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

«в» дает вектор сочленения, где цвета меняются

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

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. Так что это всего лишь один вектор.

+0

Из документов облака (решетки): 'Весы: список, описывающий весы. Как и в случае с другими функциями высокого уровня ... Он также может содержать компоненты со специальными именами x, y и z, которые могут быть ** аналогичными списками ** с ориентированными по оси значениями, переопределяющими те, которые указаны в масштабах. ' Если i дайте ему один длинный числовой вектор, затем он использует те же самые места, чтобы делать отметки на всех трех осях. Один вектор не дает никаких указаний, когда одна ось заканчивается, а другая начинается. Если я это сделаю: 'at = c (1: 26,1: 26,4 * 10^-6,4 * 10^-6)' Например, он работает, но я получаю слишком много тиков на x и y, а на Z. нет. – FabbyRob

+0

. В разных контекстах используются аргументы «at». См. Мой пример ниже. –

1

Те результат нуждается в дальнейшей работе, но это действительно удовлетворяет ваш запрос и показывает, что имеется в виду, передавая аргументы «чешуи» в виде списка:

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

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

Смежные вопросы