R中的相同条形图上的多个变量与ifelse col语句

时间:2015-07-09 17:10:23

标签: r plot

我目前有一个大小为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(尝试过,没有工作),或者完全调用别的东西?我会发布一份关于我目前进展的情节,但我还没有足够的声誉。

如果我还不够清楚,请告诉我,尽我所能来描述我正在做的事情。

2 个答案:

答案 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'))

Example "heatmap"

答案 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"))