我有一个简单的问题,我无法解决:我想用因子绘制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))
..,然后重新运行该图。即使从最初的两个级别中进行选择,也无法分配另一个级别:
mon[1,1] <- f[1]
我用
levels
,relevel
,order
等做了很多尝试,但没有成功。有人有主意吗?
我有一个无法解决的简单问题:我想绘制一个带因子的data.frame(一个月),其中有时缺少水平。 R属性仅是现有的级别,因此如果...
矩阵无法容纳因子。将factor
放入matrix
时,它会被强制为character
,并且未使用的电平会丢失。出于这个原因(以及其他类转换),as.data.frame(matrix(...)))
是一个坏习惯。