如何在 R 中按组绘制二进制数据和颜色存在
How to plot binary data and colour presence by group in R
我是 R 初学者,我正在尝试绘制简单的 presence/absence 二进制数据。我到处搜索,但我不知道是否可以用 grouping/metadata 为情节着色。到目前为止,我有一个简单的 ggplot 图,代码如下:
我的数据是这样的:
library(ggplot2)
data <- read.csv("resistance.csv", row.names=1)
data_matrix <- data.matrix(data)
mybinarymap <- heatmap(data_matrix, Rowv=NA, Colv=NA, col = c("white","black"))
剧情如下:
但是,我想将方块更改为由基因所属的 'Class' 着色,例如额外数据如下所示:
如果值为 0,将有 white/no 颜色的方块,如果基因存在,方块将被着色,颜色由 'Class' 列决定。任何人都可以帮助或建议其他包裹吗? UpSetR 似乎没有按照我的要求进行。我假设我将不得不做一些重塑。感谢您的帮助。
您可以在 ggplot2
中完成所有这些工作,并借助 reshape2
的一点帮助将您的数据转换为长格式。在这里,我假设您有一个名为 data
的数据框,它看起来像您的第二个数据图像。我不得不将你的图像通过 OCR 来重新创建你的数据,因为你没有制作可重现的示例,所以它可能不完全准确:
library(ggplot2)
library(reshape2)
ggplot(melt(data), aes(gene, variable, fill = Class, alpha = value)) +
geom_tile(colour = "gray50") +
scale_alpha_identity(guide = "none") +
coord_equal(expand = 0) +
theme_bw() +
theme(panel.grid.major = element_blank(),
axis.text.x = element_text(angle = 45, hjust = 1))
数据
data <- structure(list(gene = c("aadAl", "aadAS", "aph(3\")-lb", "aph(6)-ld",
"blaCTX-M-27", "blaOXA-1", "erm(B)", "mdf(A)", "mph(A)", "catAl"
), Class = c("Aminoglycoside", "Aminoglycoside", "Aminoglycoside",
"Aminoglycoside", "Beta-lactam", "Beta-lactam", "Macrolide", "Macrolide",
"Macrolide", "Tetracycline"), X598080 = c(1L, 0L, 1L, 1L, 1L,
0L, 1L, 1L, 1L, 0L), X607387 = c(1L, 0L, 1L, 1L, 1L, 0L, 0L,
1L, 0L, 0L), X888048 = c(1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L,
1L), X893916 = c(0L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 0L)), class = "data.frame",
row.names = c(NA, -10L))
data
#> gene Class X598080 X607387 X888048 X893916
#> 1 aadAl Aminoglycoside 1 1 1 0
#> 2 aadAS Aminoglycoside 0 0 0 1
#> 3 aph(3")-lb Aminoglycoside 1 1 0 0
#> 4 aph(6)-ld Aminoglycoside 1 1 0 0
#> 5 blaCTX-M-27 Beta-lactam 1 1 0 1
#> 6 blaOXA-1 Beta-lactam 0 0 1 0
#> 7 erm(B) Macrolide 1 0 1 1
#> 8 mdf(A) Macrolide 1 1 1 1
#> 9 mph(A) Macrolide 1 0 1 1
#> 10 catAl Tetracycline 0 0 1 0
由 reprex package (v0.3.0)
于 2020-07-13 创建
我是 R 初学者,我正在尝试绘制简单的 presence/absence 二进制数据。我到处搜索,但我不知道是否可以用 grouping/metadata 为情节着色。到目前为止,我有一个简单的 ggplot 图,代码如下:
我的数据是这样的:
library(ggplot2)
data <- read.csv("resistance.csv", row.names=1)
data_matrix <- data.matrix(data)
mybinarymap <- heatmap(data_matrix, Rowv=NA, Colv=NA, col = c("white","black"))
剧情如下:
但是,我想将方块更改为由基因所属的 'Class' 着色,例如额外数据如下所示:
如果值为 0,将有 white/no 颜色的方块,如果基因存在,方块将被着色,颜色由 'Class' 列决定。任何人都可以帮助或建议其他包裹吗? UpSetR 似乎没有按照我的要求进行。我假设我将不得不做一些重塑。感谢您的帮助。
您可以在 ggplot2
中完成所有这些工作,并借助 reshape2
的一点帮助将您的数据转换为长格式。在这里,我假设您有一个名为 data
的数据框,它看起来像您的第二个数据图像。我不得不将你的图像通过 OCR 来重新创建你的数据,因为你没有制作可重现的示例,所以它可能不完全准确:
library(ggplot2)
library(reshape2)
ggplot(melt(data), aes(gene, variable, fill = Class, alpha = value)) +
geom_tile(colour = "gray50") +
scale_alpha_identity(guide = "none") +
coord_equal(expand = 0) +
theme_bw() +
theme(panel.grid.major = element_blank(),
axis.text.x = element_text(angle = 45, hjust = 1))
数据
data <- structure(list(gene = c("aadAl", "aadAS", "aph(3\")-lb", "aph(6)-ld",
"blaCTX-M-27", "blaOXA-1", "erm(B)", "mdf(A)", "mph(A)", "catAl"
), Class = c("Aminoglycoside", "Aminoglycoside", "Aminoglycoside",
"Aminoglycoside", "Beta-lactam", "Beta-lactam", "Macrolide", "Macrolide",
"Macrolide", "Tetracycline"), X598080 = c(1L, 0L, 1L, 1L, 1L,
0L, 1L, 1L, 1L, 0L), X607387 = c(1L, 0L, 1L, 1L, 1L, 0L, 0L,
1L, 0L, 0L), X888048 = c(1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L,
1L), X893916 = c(0L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 0L)), class = "data.frame",
row.names = c(NA, -10L))
data
#> gene Class X598080 X607387 X888048 X893916
#> 1 aadAl Aminoglycoside 1 1 1 0
#> 2 aadAS Aminoglycoside 0 0 0 1
#> 3 aph(3")-lb Aminoglycoside 1 1 0 0
#> 4 aph(6)-ld Aminoglycoside 1 1 0 0
#> 5 blaCTX-M-27 Beta-lactam 1 1 0 1
#> 6 blaOXA-1 Beta-lactam 0 0 1 0
#> 7 erm(B) Macrolide 1 0 1 1
#> 8 mdf(A) Macrolide 1 1 1 1
#> 9 mph(A) Macrolide 1 0 1 1
#> 10 catAl Tetracycline 0 0 1 0
由 reprex package (v0.3.0)
于 2020-07-13 创建