创建与第一个热图具有相同行顺序的第二个 ggplot 热图
Creating a second ggplot heatmap with the same row order as the first heatmap
我正在尝试在 ggplot 中创建第二个热图,它将保留第一个热图中的行,以便我可以比较结果。
我有一个 File_A 包含超过 1000 行,类似于下面
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
还有一个 modified_File_A 也包含 1000 多行,类似于下面:
Animal Bloodtype Count
Horse O 310
Horse A 35
Horse B 234
Horse AB 325
Horse O 346
Horse A 427
Horse B 439
Horse AB 410
Horse Unknown 210
Cat O 312
Cat A 215
Cat B 314
Cat AB 415
Cat O 316
Cat A 617
Cat B 419
Cat AB 314
Cat Unknown 214
Dog O 239
Dog A 223
Dog B 312
Dog AB 342
Dog O 245
Dog A 423
Dog B 345
Dog AB 532
Dog Unknown 132
Mouse O 13
Mouse A 24
Mouse B 65
Mouse AB 33
Mouse O 56
Mouse A 48
Mouse B 28
Mouse AB 320
Mouse Unknown 202
Pig O 193
Pig A 135
Pig B 224
Pig AB 321
Pig O 252
Pig A 323
Pig B 352
Pig AB 222
Pig Unknown 222
这是我用来创建第一个热图的代码
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(x = Bloodtype, y = Animal, fill = Bloodtype, alpha = Count)) +
geom_tile(fill = "white", alpha = 1) +
geom_tile() +
scale_alpha_continuous(breaks = seq(0, max(csv_file.s$Count), length.out =
10),limits = c(0, NA))
将y轴排列为:
猪
老鼠
马
狗
猫
我正在尝试使用相同的代码创建第二个热图,但它没有保持第一个热图的 y 轴顺序..
csv_file<-read.csv("~/Documents/Modified_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("O" = c("O"),
"A" = c("A"),
"B" = c("B"),
"AB" = c("AB"),
"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=4)
colorends <- c("white", "Aquamarine4", "white", "yellow4", "white", "turquoise4","white","orange4","white","blue4")
ggplot(csv_file.s, aes(x = Bloodtype, y = Animal, fill = Bloodtype, alpha = Count)) +
geom_tile(fill = "white", alpha = 1) +
geom_tile() +
scale_alpha_continuous(breaks = seq(0, max(csv_file.s$Count), length.out =
10),limits = c(0, NA))
我不确定是否有办法将第一个热图的 y 轴顺序分配给一个变量,以便我可以将它作为一个级别引入第二个热图?
我认为您的代码中可能有一些拼写错误。 ggplot 使用 df 作为变量,而不是代码中的 csv_file.s 。我尝试了您的代码,更新变量后,您提供的两个数据集的 y-axis 都相同。测试可重现代码时最好重新启动 R,并确保包括所有内容,包括您的库调用。
祝你好运
我正在尝试在 ggplot 中创建第二个热图,它将保留第一个热图中的行,以便我可以比较结果。
我有一个 File_A 包含超过 1000 行,类似于下面
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
还有一个 modified_File_A 也包含 1000 多行,类似于下面:
Animal Bloodtype Count
Horse O 310
Horse A 35
Horse B 234
Horse AB 325
Horse O 346
Horse A 427
Horse B 439
Horse AB 410
Horse Unknown 210
Cat O 312
Cat A 215
Cat B 314
Cat AB 415
Cat O 316
Cat A 617
Cat B 419
Cat AB 314
Cat Unknown 214
Dog O 239
Dog A 223
Dog B 312
Dog AB 342
Dog O 245
Dog A 423
Dog B 345
Dog AB 532
Dog Unknown 132
Mouse O 13
Mouse A 24
Mouse B 65
Mouse AB 33
Mouse O 56
Mouse A 48
Mouse B 28
Mouse AB 320
Mouse Unknown 202
Pig O 193
Pig A 135
Pig B 224
Pig AB 321
Pig O 252
Pig A 323
Pig B 352
Pig AB 222
Pig Unknown 222
这是我用来创建第一个热图的代码
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(x = Bloodtype, y = Animal, fill = Bloodtype, alpha = Count)) +
geom_tile(fill = "white", alpha = 1) +
geom_tile() +
scale_alpha_continuous(breaks = seq(0, max(csv_file.s$Count), length.out =
10),limits = c(0, NA))
将y轴排列为: 猪 老鼠 马 狗 猫
我正在尝试使用相同的代码创建第二个热图,但它没有保持第一个热图的 y 轴顺序..
csv_file<-read.csv("~/Documents/Modified_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("O" = c("O"),
"A" = c("A"),
"B" = c("B"),
"AB" = c("AB"),
"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=4)
colorends <- c("white", "Aquamarine4", "white", "yellow4", "white", "turquoise4","white","orange4","white","blue4")
ggplot(csv_file.s, aes(x = Bloodtype, y = Animal, fill = Bloodtype, alpha = Count)) +
geom_tile(fill = "white", alpha = 1) +
geom_tile() +
scale_alpha_continuous(breaks = seq(0, max(csv_file.s$Count), length.out =
10),limits = c(0, NA))
我不确定是否有办法将第一个热图的 y 轴顺序分配给一个变量,以便我可以将它作为一个级别引入第二个热图?
我认为您的代码中可能有一些拼写错误。 ggplot 使用 df 作为变量,而不是代码中的 csv_file.s 。我尝试了您的代码,更新变量后,您提供的两个数据集的 y-axis 都相同。测试可重现代码时最好重新启动 R,并确保包括所有内容,包括您的库调用。 祝你好运