y值之间的点阵图中的间距不一致

时间:2016-03-19 14:43:51

标签: r plot lattice

我正在尝试使用来自'lattice'的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")))

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

有人知道发生了什么以及我可以做些什么来解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

您可以使用lattice作者的功能(请参阅dotplot, dropping unused levels of 'y')。

从帖子中引用Deepayan Sarkar:

“这有点问题。基本上,你可以使用relation="free"/"sliced",但y表现为as.numeric(y)。因此,如果每个面板中的小子集总是或多或少连续(就水平彼此接近)那么你会没事的。否则你就不会。在这种情况下,你仍然可以编写自己的prepanelpanel函数,“

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

相关问题