2016-03-19 2 views
1

Я пытаюсь использовать dotplot() из'lattice 'для построения набора данных, где категории присутствуют только для подмножества, и я звоню scales = list(y = list(relation = "free")), чтобы избежать ненужного вертикального интервала. Однако, делая это, кажется, препятствует вертикальному расстоянию между элементами. Что еще, по-видимому, связано с тем, перекрываются ли категории, потому что только тогда возникает ошибка.Непоследовательное расстояние в ячейке решетки между значениями y

library(lattice) 

variables <- c(rep("Age", 4), rep("Sex", 2), rep("Children", 3)) 
levels <- c(1, 5, 100, 101, "Females", "Males", 2, 3, 90) 
values <- rnorm(9)  

dotplot(levels ~ values | variables, layout = c(1,3), 
     scales = list(y = list(relation = "free"))) 

Imgur

Вы можете ясно видеть, что расстояние между, например, 90 и 3 выключены, в то время как нет никакой проблемы с мужчинами и женщинами. Теперь, если я изменю категории с числовыми значениями, чтобы они не перекрывались, я получаю правильный интервал.

levels <- c(1:4, "Females", "Males", 5:7) 

dotplot(levels ~ values | variables, layout = c(1,3), 
     scales = list(y = list(relation = "free"))) 

Imgur

Кто-нибудь знает, что происходит и что я могу сделать, чтобы исправить это?

ответ

2

Вы можете использовать функцию автор: lattice (см. dotplot, dropping unused levels of 'y').

Цитирование Deepayan Саркар с этого поста:

«Это немного проблематично В принципе, вы можете использовать relation="free"/"sliced", но у ведет себя как as.numeric(y) бы так, если небольшое подмножество в каждой панели всегда более или менее непрерывным.. (с точки зрения уровней, близких друг к другу), то вам будет хорошо. в противном случае вы бы не так. в этом случае, вы можете написать свои собственные prepanel и panel функции»

dotplot(levels ~ values | variables, layout = c(1,3), 
     scales = list(y = list(relation = "free")), 
     prepanel = function(x, y, ...) { 
      yy <- y[, drop = TRUE] 
      list(ylim = levels(yy), 
       yat = sort(unique(as.numeric(yy)))) 
     }, 
     panel = function(x, y, ...) { 
      yy <- y[, drop = TRUE] 
      panel.dotplot(x, yy, ...) 
     }) 

enter image description here

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

  • Нет связанных вопросов^_^