Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 三色打印矩阵_R_Heatmap - Fatal编程技术网

R 三色打印矩阵

R 三色打印矩阵,r,heatmap,R,Heatmap,我正在尝试绘制一个数据图,如下所示: NA B B A B A NA B A NA B B B NA B B A B A B . . B B B NA A A B B A B for each line If A = red dot if B = black dot if NA = grey dot 有人能帮我怎么做吗你的问题不是很清楚,但可能是这样的 #some data set.seed(42) dat <- matrix(sample(c("A","B",NA), 25

我正在尝试绘制一个数据图,如下所示:

NA B B A  B A NA B A NA
B  B B NA B B A  B A B
.
.
B  B B NA A A B  B A B

for each line
If A = red dot
if B = black dot
if NA = grey dot

有人能帮我怎么做吗你的问题不是很清楚,但可能是这样的

#some data
set.seed(42)
dat <- matrix(sample(c("A","B",NA), 25, TRUE), 5)
#     [,1] [,2] [,3] [,4] [,5]
# [1,] NA   "B"  "B"  NA   NA  
# [2,] NA   NA   NA   NA   "A" 
# [3,] "A"  "A"  NA   "A"  NA  
# [4,] NA   "B"  "A"  "B"  NA  
# [5,] "B"  NA   "B"  "B"  "A" 

#reshape, so ggplot likes it
library(reshape2)
df <- melt(t(dat))
df$value <- as.character(df$value)

#to be able to plot NA values
df$value[is.na(df$value)] <- "NA"

library(ggplot2)
ggplot(df, aes(x=Var1, y=-Var2, fill=value)) + 
  geom_tile() +
  scale_x_continuous(expand=c(0,0), breaks=seq_len(max(df$Var1))) +
  scale_y_continuous(expand=c(0,0), breaks=-seq_len(max(df$Var2)),
                     labels=seq_len(max(df$Var2))) +
  scale_fill_manual(values=c("A"="red", "B"="black", "NA"="grey")) +
  theme_bw() +
  theme(axis.title=element_blank())

提供此示例只是为了详细说明如何实现。这远远不是最紧凑的代码

dmat[dmat=="A"]<-0
dmat[dmat=="B"]<-1
dmat[is.na(dmat)]<-2
mycolors<-c('red','black','grey')
# initial plot area
plot(c(1,nrow(dmat)),c(1,ncol(dmat)),t='n')

for (i in 1:nrow(dmat)){
   for(j in 1:ncol(dmat)) {
       points(i,j,col=mycolors[dmat[i,j]])
       }
   }

dmat[dmat==“A”]@SeñorO我做不到,但我尝试了一些类似的东西:plot(matrix,xlim=c(1,nrow),ylim=c(1,ncol),type=“n”)sapply(1:nrow,function(X){points(1:ncol,rep(X,ncol),pch=ifelse(matrix[1,nrow=“NA”,19,1)),这真的很棒,但我得到了这个错误:总结错误。因子(c)(1L,12L,20L,21L,22L,23L,24L,25L,26L,:max对于因子没有意义我已经添加了如果你的矩阵有dimname的话怎么做。我不知道为什么会出现这个错误:for(I in 1:nrow(dat)){+for(j in 1:ncol(dat){错误:意外的“{”in:(I in 1:nrow(dat)){for(j in 1:ncol(dat){”点(I,j,col mycolors[I,j]}}错误:在“points(i,j,col=mycolors[dat[i,j]])中出现意外“}”@MaryamSani抱歉--我在“for(j…”行中留下了一个括号。现已修复。
dmat[dmat=="A"]<-0
dmat[dmat=="B"]<-1
dmat[is.na(dmat)]<-2
mycolors<-c('red','black','grey')
# initial plot area
plot(c(1,nrow(dmat)),c(1,ncol(dmat)),t='n')

for (i in 1:nrow(dmat)){
   for(j in 1:ncol(dmat)) {
       points(i,j,col=mycolors[dmat[i,j]])
       }
   }