如何在 Cytoscape 3 中添加节点大小作为图例?

How to add node size as legend in Cytoscape 3?

我从 R 函数 (cnetplot) 获得了下图,但看起来不太好。 因此,我从 R 对象中提取数据并编写了一个脚本来创建一个等效的网络数据文件,该文件可由 Cytoscape 读取。以下来自 Cytoscape 的等效图看起来好多了,但问题是我无法像 R 函数那样在 Cytoscape 中添加基于节点大小的图例。我在 cytoscspe 中尝试使用 Legend Creator 应用程序,但无法做到。 可以在以下 link 中找到用于重现绘图的原始数据和 R 代码。 ftp://ftp.lrz.de/transfer/Data_For_Plot/Whosebug/

我调查了这个 Mapping nodes sizes and adding legends in cytoscape network,但在那种情况下,发问者已经能够将节点大小作为 cytoscape 中的图例加载,而且,he/she 使用了 python 包。

任何建议将不胜感激

这是一个小的 R 脚本,它将生成 min/max 节点大小图例。您需要将第一个变量设置为网络中视觉样式的名称。这与示例会话文件一起使用,"Yeast Perturbation.cys" 如果您想先在那里进行测试。

如果您熟悉 RCy3,那么它应该是不言自明的。您可以自定义节点的位置、标签和标签字体大小等。如果需要,您甚至可以调整它以生成中间值(如上面的示例)。

注意:这会向您的网络添加节点。如果你 运行 添加这些后布局,那么它们将被移动!如果您依赖节点计数或连接测量,那么这些将影响这些计数!等等

如果你觉得这有用,我可能会尝试将它作为辅助函数添加到 RCy3 包中。如果您有任何反馈或问题,请告诉我。

# https://bioconductor.org/packages/release/bioc/html/RCy3.html
library(RCy3)

# Set your current style name
style.name <- "galFiltered Style"

# Extract min and max node size
res<-cyrestGET(paste0("styles/",style.name,"/mappings/NODE_SIZE"))
size.col <- res$mappingColumn
min.size <- res$points[[1]]$equal
min.value <- res$points[[1]]$value
max.size <- res$points[[length(res$points)]]$equal
max.value <- res$points[[length(res$points)]]$value

# Prepare as data.frame
legend.df <-data.frame(c(min.size, max.size), c(min.value, max.value))
colnames(legend.df) <- c("legend.label",size.col)
rownames(legend.df) <- c("legend.size.min", "legend.size.max")

# Add legend nodes and data
addCyNodes(c("legend.size.min", "legend.size.max"))
loadTableData(legend.df)

# Style and position
setNodeColorBypass(c("legend.size.min", "legend.size.max"),"#000000")
setNodePropertyBypass(c("legend.size.min", "legend.size.max"), 
                      c("E,W,l,5,0", "E,W,l,5,0"),  # node_anchor, label_anchor, justification, x-offset, y-offset
                      "NODE_LABEL_POSITION")
setNodeLabelBypass(c("legend.size.min", "legend.size.max"), legend.df$legend.label)
setNodePropertyBypass("legend.size.max", 
                      as.numeric(max.size)/2 + as.numeric(min.size)/2 + 10, # vertical spacing
                      "NODE_Y_LOCATION")
setNodeFontSizeBypass(c("legend.size.min", "legend.size.max"), c(20,20))