我目前有一个大小为365x8(365天,8个变量)的数据矩阵。每天的值代表一个真值或假值,对于每一天,我想绘制一个红色框如果为true,则一个绿色框表示为false。
我的目标是在条形图中显示矩阵的所有8列。下面是我现有的一些代码。
data # matrix with size 365x8
# Plot good vs. bad data
first <- barplot(data, xlab = "# of Days", ylab = "Type of Data",
col=ifelse(data==TRUE, "red", "green"), beside=FALSE, horiz=TRUE,
xlim=c(0,365))
print(first)
我想要&#39; col&#39;转到数据&#39;中每列的每个值并确定每天的每个值应该是哪种颜色。我的问题是我只能让我的条形图绘制数据中的第一个变量(数据[,1]),并且它会为所有八个重复这个。我是否需要多次调用barplot(尝试过,没有工作),或者完全调用别的东西?我会发布一份关于我目前进展的情节,但我还没有足够的声誉。
如果我还不够清楚,请告诉我,尽我所能来描述我正在做的事情。
答案 0 :(得分:1)
您是否考虑过使用ggplot2
并创建&#34;热图&#34;类型情节(geom_tile
)?我举了一个例子,dat
是你的数据矩阵,所有值都是0或1。
ggplot(melt(dat), aes(x=Var2, y=Var1, fill=factor(value))) +
geom_tile() +
scale_fill_manual(values=c('green', 'red'))
编辑:您还需要使用melt
包中的reshape2
。这是我随机使用的数据,以及生成的部分图:
dat <- replicate(8, sample(c(0, 0, 0, 1), 365, replace=T))
ggplot(melt(dat[1:50, ]), aes(x=Var2, y=Var1, fill=factor(value))) +
geom_tile() +
scale_fill_manual(values=c('green', 'red'))
答案 1 :(得分:0)
您也可以使用基数R中的heatmap()
执行此操作。但它仅适用于数值,因此您需要先将TRUE / FALSE值转换为数字。此外,为了使图中的行和列的顺序与矩阵中的顺序相同,您需要在调用heatmap()
时关闭重新排序。所以像这样:
data.num <- ifelse(data == TRUE, 1, 0)
heatmap(data.num, Rowv = NA, Colv = NA, col = ifelse(z==1, "gray15", "gray85"))