R ggplot:如何在不考虑变量数量的情况下绘制热图
使用下面的R ggplot:如何在不考虑变量数量的情况下绘制热图,r,ggplot2,dplyr,heatmap,tidyr,R,Ggplot2,Dplyr,Heatmap,Tidyr,使用下面的data.frame 数据 df <- read.table(text = c(" NA NA NA NA NA NA NA NA NA NA NA NA 0.4748 NA NA NA NA NA NA NA NA NA NA NA 0.905 0.5362 NA NA NA NA NA NA NA NA NA
data.frame
数据
df <- read.table(text = c("
NA NA NA NA NA NA NA NA NA NA NA NA
0.4748 NA NA NA NA NA NA NA NA NA NA NA
0.905 0.5362 NA NA NA NA NA NA NA NA NA NA
0.0754 0.0118 0.0614 NA NA NA NA NA NA NA NA NA
0.8768 0.3958 0.7952 0.1034 NA NA NA NA NA NA NA NA
0.5708 0.2056 0.4984 0.2356 0.6736 NA NA NA NA NA NA NA
0.2248 0.6204 0.268 0.0014 0.183 0.0768 NA NA NA NA NA NA
0.483 0.9824 0.5314 0.0114 0.3906 0.1968 0.6308 NA NA NA NA NA
0.697 0.732 0.7604 0.0264 0.594 0.3334 0.416 0.7388 NA NA NA NA
0.2918 0.7286 0.3382 0.003 0.2386 0.1122 0.8712 0.7266 0.509 NA NA NA
0.5904 0.8352 0.6704 0.0188 0.4966 0.273 0.5192 0.8328 0.8736 0.5914 NA NA
0.3838 0.8768 0.4476 0.0042 0.3148 0.1498 0.7288 0.873 0.6178 0.8276 0.7432 NA
"), header = F)
colnames(df) <- c( "TK1", "TK2", "TK3", "TK4" , "TK5", "TK6", "TK7", "TK8", "TK9", "TK10", "TK11", "TK12")
rownames(df) <- c( "TK1", "TK2", "TK3", "TK4" , "TK5", "TK6", "TK7", "TK8", "TK9", "TK10", "TK11", "TK12")
df
# TK1 TK2 TK3 TK4 TK5 TK6 TK7 TK8 TK9 TK10 TK11 TK12
#TK1 NA NA NA NA NA NA NA NA NA NA NA NA
#TK2 0.4748 NA NA NA NA NA NA NA NA NA NA NA
#TK3 0.9050 0.5362 NA NA NA NA NA NA NA NA NA NA
#TK4 0.0754 0.0118 0.0614 NA NA NA NA NA NA NA NA NA
#TK5 0.8768 0.3958 0.7952 0.1034 NA NA NA NA NA NA NA NA
#TK6 0.5708 0.2056 0.4984 0.2356 0.6736 NA NA NA NA NA NA NA
#TK7 0.2248 0.6204 0.2680 0.0014 0.1830 0.0768 NA NA NA NA NA NA
#TK8 0.4830 0.9824 0.5314 0.0114 0.3906 0.1968 0.6308 NA NA NA NA NA
#TK9 0.6970 0.7320 0.7604 0.0264 0.5940 0.3334 0.4160 0.7388 NA NA NA NA
#TK10 0.2918 0.7286 0.3382 0.0030 0.2386 0.1122 0.8712 0.7266 0.5090 NA NA NA
#TK11 0.5904 0.8352 0.6704 0.0188 0.4966 0.2730 0.5192 0.8328 0.8736 0.5914 NA NA
#TK12 0.3838 0.8768 0.4476 0.0042 0.3148 0.1498 0.7288 0.8730 0.6178 0.8276 0.7432 NA
结果
问题
我想让热图的绘制成为动态的。那么,不管变量和观测值的数量如何,都可以绘制热图,而无需更改不同变量数量的代码
有什么办法吗
library(ggplot2)
library(tidyr)
library(dplyr)
无论有多少列和行,此代码块都可以工作
df <-
df %>%
mutate(Relationship = rownames(.)) %>% #Replaces trial$Relationship <- rownames(df)
select(Relationship, everything()) %>% #Replaces trial1 <- subset(trial, select = c(13, 1, 2, 3,4,5,6,7,8,9,10,11,12))
gather('Relation1', 'Strength', -1) %>% #Replaces df2 <- gather(trial1, "Relation1", "Strength", 2:13)
mutate(Strength = round(Strength, digits = 2))
df%
mutate(Relationship=rownames(.))%>%#替换试用版$Relationship%#替换trial1%#替换df2%
不同的()%>%
提取(关系,放入=c(“TK”,“num”),“(\\D+)(\\D+)”,
删除=假,转换=真)%>%
排列(数量)%>%
选择(关系)
df%
变异(关系=因子(关系,级别=因子级别$关系),
关系1=系数(关系1,级别=修订版(系数级别$关系)))
修改的绘图代码
ggheatmap <- ggplot(df, aes(Relationship, Relation1, fill = Strength))+
geom_tile(color = "white")+
scale_fill_gradient2(low = "red", high = "green", mid = "lightgreen",
midpoint = 0.5, limit = c(0,1), space = "Lab",
name="Correlation") + theme_minimal()
ggheatmap +
geom_text(aes(Relationship, Relation1, label = Strength), color = "black", size = 4) +
labs(x = expression(""),
y=expression(""))
ggheatmap在这种情况下,我觉得你的方法很迂回(我提到过)。这段代码只需要使用colnames(df)和rownames(df)
库(2);图书馆(GG2)
df2@MirHenglin因为您正在对factorLevels
中的因子级别进行排序,在调用factor
时也设置ordered=TRUE
对您来说有意义吗?@steveb我认为如果您使用变量进行建模,TK
变量使得TK3
大于TK2
大于TK1
,则使用ordered=TRUE
更重要,因为在建模时,有序因子和无序因子的处理方式可能非常不同。排列因子的级别只是告诉函数获取变量的顺序;它不会改变因子的值。
# Order Relatinoship variables by numeric suffix
# Since its a square matrix you only have to do it once for both columns
factorLevels <-
df %>%
select(Relationship) %>%
distinct() %>%
extract(Relationship, into = c("TK", "num"), "(\\D+)(\\d+)",
remove = FALSE, convert=TRUE) %>%
arrange(num) %>%
select(Relationship)
df <-
df %>%
mutate(Relationship = factor(Relationship, levels = factorLevels$Relationship),
Relation1 = factor(Relation1, levels = rev(factorLevels$Relationship)))
ggheatmap <- ggplot(df, aes(Relationship, Relation1, fill = Strength))+
geom_tile(color = "white")+
scale_fill_gradient2(low = "red", high = "green", mid = "lightgreen",
midpoint = 0.5, limit = c(0,1), space = "Lab",
name="Correlation") + theme_minimal()
ggheatmap +
geom_text(aes(Relationship, Relation1, label = Strength), color = "black", size = 4) +
labs(x = expression(""),
y=expression(""))
library(reshape2); library(ggplot2)
df2 <- melt(as.matrix(df), id.var = names(df)[1]) # as.matrix() fixes colnames of long df.
df2$Var2 <- with(df2, factor(Var2, levels=rev(levels(Var2))))
ggheatmap <- ggplot(df2, aes(Var1, Var2, fill=value)) +
geom_tile(color = "white")+
scale_fill_gradient2(low = "red", high = "green", mid = "lightgreen",
midpoint = 0.5, limit = c(0,1), space = "Lab",
name="Correlation") + theme_minimal()
ggheatmap +
geom_text(aes(label = round(value, 2)), color = "black", size = 4) +
labs(x = expression(""), y=expression(""))