- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我以前从未做过这样的情节,很抱歉,因为这可能是一个基本问题,但我一直在研究如何制作和弦图,特别是如何将外部部分作为我的列标题(药物机制)并且各部分之间的内部连接是不需要在图中命名的行(基因),因为有这么多。
我的数据是用 0 或 1 标记为与药物机制列相互作用的基因行。
例如,我的数据子集如下所示:
Gene Diuretic Beta_blocker ACE_inhibitor
Gene1 1 0 0
Gene2 0 0 1
Gene3 1 1 1
Gene4 0 1 1
我的总数据实际上是 15 列药物机制的 700 个基因,其中包含所有 zeors 和 ones。我目前正在创建一个和弦图:
df <- fread('df.csv')
df[is.na(df)] <- 0
df <- df %>% data.frame %>% set_rownames(.$Gene) %>% dplyr::select(-Gene)
mt <- as.matrix(df)
circos.par(gap.degree = 0.9) #set this as I was otherwise getting an error with my total data
chordDiagram(mt, transparency = 0.5)
我一直在试图让这个图只有 15 个部分(甚至只是试图让这些部分具有列名)时遇到各种错误。
有没有办法让我绘制一个和弦图,其中的部分代表每一列?那么对于该部分和弦图中显示的任何其他部分具有交互作用(数据中的 1)的基因/行?我不需要基因名称可见,我只想可视化我的列/部分之间的重叠量。
示例输入数据(我的问题是尝试让每列只有 3 个部分来显示它们的重叠):
df <- structure(list(Gene = c("Gene1", "Gene2", "Gene3", "Gene4"),
Diuretic = c(1L, 0L, 1L, 0L), Beta_blocker = c(0L, 0L, 1L,
1L), ACE_inhibitor = c(0L, 1L, 1L, 1L)), row.names = c(NA,
-4L), class = c("data.table", "data.frame")
最佳答案
如果您有 15 种不同的药物机制,最好计算各种机制共有的基因,并使用这些作为药物作用之间联系的权重。
您的示例数据太有限,无法给人一种感觉,但代码应该是这样的:
new_df <-apply(df, 1, function(x) {
x <- names(df)[which(x == 1)]
m <- 1 - diag(length(x))
dimnames(m) <- list(x, x)
inds <- which(lower.tri(m), arr.ind = TRUE)
data.frame(from = x[inds[,1]], to = x[inds[,2]])}) %>%
bind_rows() %>%
mutate(wt = 1) %>%
group_by(from, to) %>%
summarize(wt = sum(wt), .groups = 'drop')
new_df
#> # A tibble: 3 x 3
#> from to wt
#> <chr> <chr> <dbl>
#> 1 ACE_inhibitor Beta_blocker 2
#> 2 ACE_inhibitor Diuretic 1
#> 3 Beta_blocker Diuretic 1
我们可以看到,我们有两个基因对 ACE 抑制剂和 β 受体阻滞剂机制具有共同作用(这就是您的表格所暗示的),以及一个将利尿剂与 β 受体阻滞剂和 ACE 抑制剂与利尿剂联系起来的基因。
这会产生以下相当沉闷的和弦图:
chordDiagram(new_df)
但是,如果我们制作一个与您的真实数据规模相同的样本数据集,我们会得到更令人满意的结果:
set.seed(123)
big_dat <- as.data.frame(matrix(rbinom(15 * 700, 1, 0.5), 700),
row.names = paste0('Gene', 1:700)) %>%
setNames(c('ACE_inhibitor', 'Diuretic', 'Beta_Blocker',
'CCB', 'Nitrate', 'K_channel', 'Aldosterone_blocker',
'Vasodilator', 'PDEI', 'Central', 'Relaxant',
'ARB', 'Alpha_blocker', 'Dopaminergic', 'Unknown'))
big_df <- apply(big_dat, 1, function(x) {
x <- names(big_dat)[which(x == 1)]
m <- 1 - diag(length(x))
dimnames(m) <- list(x, x)
inds <- which(lower.tri(m), arr.ind = TRUE)
data.frame(from = x[inds[,1]], to = x[inds[,2]])}) %>%
bind_rows() %>%
mutate(wt = 1) %>%
subset(complete.cases(.)) %>%
group_by(from, to) %>%
summarize(wt = sum(wt), .groups = 'drop')
chordDiagram(big_df)
关于r - 如何在 r 中创建和弦图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73609132/
我使用Andrew的d3和弦图示例并希望将弯曲切片内的所有文本标签居中。我尝试了很多东西,但始终无法将文本居中。你知道需要什么巫师技巧吗? var width = 720, height = 720,
我正在尝试实现一个系统,在该系统中我可以同时播放一组频率,目前可以单独播放每个频率。下面我有一个代码,它播放给定的频率,一次播放一个。 import java.applet.*; im
是否可以一次重新映射使用 ctrl+k 作为第一个按键操作的所有和弦? 我使用 ctrl+k 删除该行的其余部分。由于它与 vscode 中使用的最常见和弦冲突,因此通过快捷方式重新映射快捷方式会很不
我是一名优秀的程序员,十分优秀!