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]])
}
}