Несогласованный интервал в точечной диаграмме решетки между значениями y
Я пытаюсь использовать dotplot()
из "решетки", чтобы построить набор данных, где категории присутствуют только для подмножества, и я звоню scales = list(y = list(relation = "free"))
чтобы избежать ненужного вертикального расстояния. Тем не менее, выполнение этого, кажется, запутывает вертикальное расстояние между предметами. Более того, похоже, что это связано с тем, перекрываются ли категории, или только тогда возникает ошибка.
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")))
Вы можете ясно видеть, что интервал между, например, 90 и 3 выключен, тогда как с мужчинами и женщинами проблем нет. Теперь, если я изменю категории, которые имеют числовые значения, чтобы они не перекрывались, я получаю правильный интервал.
levels <- c(1:4, "Females", "Males", 5:7)
dotplot(levels ~ values | variables, layout = c(1,3),
scales = list(y = list(relation = "free")))
Кто-нибудь знает, что происходит и что я могу сделать, чтобы это исправить?
1 ответ
Вы можете использовать функцию автора lattice
(см. точечный график, отбрасывая неиспользуемые уровни "у").
Цитируя Дипаян Саркар из этого поста:
"Это немного проблематично. В основном, вы можете использовать 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, ...)
})