R得到传奇因子

时间:2015-02-20 14:46:07

标签: r categorical-data

我正在绘制按类别着色的数据。

类别顺序不按字母顺序排序,但有意义

labels = c('V', 'A', 'UNKNOWN')

data = data.frame(
  x        = c(1,2,3),
  y        = c(4,5,6),
  category = factor(c('UNKNOWN', 'V', 'UNKNOWN'), labels))

plot(data$x, data$y, pch = 16, col = data$category)
legend('bottomright', labels, pch = 16, col = seq_along(labels))

现在如果我真的想从图例中排除不存在的等级呢?

我基本上想要一种优雅的方法来获取data$category中存在的级别名称及其索引。但我能想到的每一种方式都是非常手工的。

subset = which(labels %in% data$category)
label.subset = labels[subset]

PS:自动创建因子水平是没有选择的,因为颜色应该在具有这三个类别的不同子集的多个图中保持稳定。

1 个答案:

答案 0 :(得分:0)

您可以通过再次对子集进行分解来重置级别。我认为你的传奇意味着你的意思。

legend('bottomright', levels(factor(data$category)), +
    pch = 16, col = seq_along(levels(factor(data$category))))

编辑:我错过了有关颜色保存的部分。这应该是有效的。如果您已预定义级别,他们的订单将保持不变。

legend('bottomright', levels(factor(data$category)), pch = 16, col = +
    which(levels(data$category) %in% levels(factor(data$category))))