【发布时间】:2020-01-02 18:51:35
【问题描述】:
我有一个无法解决的简单问题:
我想绘制带有因子的data.frame(一个月),其中有时缺少水平。 R 属性只有现有的级别,所以如果存在一个、两个或更多级别,我的图会有所不同。
这里是一个例子:
library(ggplot2)
library(reshape2)
f <- factor(c("Free", "Work"))
mon <- as.data.frame(matrix(as.factor(rep(f[2], times = 8)), nrow = 4))
colnames(mon) <- c("A", "B")
mt <- t(as.matrix(rev(data.frame(as.matrix(mon))))) # change order of y
m <- melt(mt)
col <- c("azure", "orange")
ggplot(m, aes(x = Var2, y = Var1, fill = value)) +
geom_tile(colour="grey10") +
scale_fill_manual(values = col, labels = f, name = NULL) +
theme(panel.background = element_rect(fill = "white"), axis.ticks = element_blank()) +
theme(axis.title.x = element_blank(), axis.title.y = element_blank())
如您所见,我将 2 个因素的第二个元素“工作”归因于元素,但它绘制了“免费”。令人不安的是,mon 的因子只有 1 个级别,而不是 2 个可能的级别。
如果我将多个级别归因于mon,它会给出另一个情节:
mon <- as.data.frame(matrix(as.factor(rep(c(f[1], f[2]), times = 4)), nrow = 4))
.. 并重新运行上面的情节。也不能分配另一个级别,即使它是从最初的 2 个级别中选择的:
mon[1,1] <- f[1]
我对@987654327@、relevel、order 等进行了很多尝试,但均未成功。有人有想法吗?
【问题讨论】: