【发布时间】:2019-10-08 03:41:19
【问题描述】:
我有一个包含以下 sn-p 的文件,除了 3000 个不同动物和血型的条目
文件A
Animal Bloodtype Count
Horse Opos 10
Horse Apos 5
Horse Bpos 4
Horse ABpos 5
Horse Oneg 6
Horse Aneg 7
Horse Bneg 9
Horse ABneg 10
Horse Unknown 10
Cat Opos 12
Cat Apos 15
Cat Bpos 14
Cat ABpos 15
Cat Oneg 16
Cat Aneg 17
Cat Bneg 19
Cat ABneg 14
Cat Unknown 14
Dog Opos 9
Dog Apos 23
Dog Bpos 12
Dog ABpos 42
Dog Oneg 45
Dog Aneg 23
Dog Bneg 45
Dog ABneg 32
Dog Unknown 32
Mouse Opos 3
Mouse Apos 4
Mouse Bpos 5
Mouse ABpos 3
Mouse Oneg 6
Mouse Aneg 8
Mouse Bneg 8
Mouse ABneg 20
Mouse Unknown 20
Pig Opos 19
Pig Apos 13
Pig Bpos 22
Pig ABpos 32
Pig Oneg 25
Pig Aneg 13
Pig Bneg 35
Pig ABneg 22
Pig Unknown 22
我正在尝试生成一个热图,其中我的 y 轴是动物,x 轴是血型,计数是值。
我正在尝试用自己的特定颜色和每列的递增梯度按血型独立着色每一列,以便轻松判断哪些动物具有大量 O 阳性,或 A 阳性等,以及通过递减梯度降低的动物数量。等等(因为血型是用颜色编码的,便于观察)
基本上,我已经尝试做类似这个 stackoverflow 问题中所做的事情:ggplot2 heatmaps: using different gradients for categories
或者这个但每行不同的颜色: Heat map per column with ggplot2
csv_file<-read.csv("~/Documents/FileA.csv")
csv_file.s <- ddply(csv_file, .(Bloodtype), transform, rescale = scale(Count))
csv_file.s$Category <- csv_file.s$Bloodtype
levels(csv_file.s$Category) <-
list("Opos" = c("Opos"),
"Apos" = c("Apos"),
"Bpos" = c("Bpos"),
"ABpos" = c("ABpos"),
"Oneg" = c("Oneg"),
"Aneg" = c("Aneg"),
"Bneg" = c("Bneg"),
"Oneg" = c("Oneg"),
"Unknown" = c("Unknown"))
csv_file.s$rescaleoffset <- csv_file.s$rescale + 100*(as.numeric(as.factor(csv_file.s$Category))-1)
scalerange <- range(csv_file.s$rescale)
gradientends <- scalerange + rep(c(0,100,200), each=8)
colorends <- c("white", "Aquamarine4", "white", "yellow4", "white", "turquoise4","white","orange4", "white", "slategray4","white","seagreen4","white","purple4","white","red4","white","blue4")
ggplot(csv_file.s, aes(Bloodtype, Animal)) +
geom_tile(aes(fill = rescaleoffset), colour = "transparent") +
scale_fill_gradientn(colours = colorends,
values = rescale(gradientends)) +
scale_x_discrete("", expand = c(0, 0))+
scale_y_discrete("", expand = c(0, 0)) +
theme(panel.background = element_rect(fill = 'white'))
theme_grey(base_size = 12) +
theme(legend.position = "none",
axis.ticks = element_blank(),
axis.text.x = element_text(angle = 330, hjust = 0))
但是渐变结果是错误的,颜色到处都是。我一直在尝试找到如何为热图中的特定列标题分配颜色,即 Unknown="blue4", ABneg="red4",但无济于事。基本上,我不知道我在做什么。 :(
任何帮助将不胜感激。
【问题讨论】: