我正在绘制按类别着色的数据。
类别顺序不按字母顺序排序,但有意义
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:自动创建因子水平是没有选择的,因为颜色应该在具有这三个类别的不同子集的多个图中保持稳定。
答案 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))))