【问题标题】:igraph plot conditional vertex colorigraph 绘制条件顶点颜色
【发布时间】:2012-10-19 06:38:54
【问题描述】:

我是 R 和 iGraph 的新手。我正在尝试使列位置 #1 中的顶点以特定颜色显示。

我的数据来自 CSV,如下所示:

CL1920  202.80  V66.7   198.89  511.9   799.02  401.9   696.1   388.01  202.80                                                                                                                               
RM119041 331.82 294.10                                                                                                                                                                                       
RM38755 331.82  294.10  276.0   331.0   294.10                                                                                                                   
HK54701 331.82  294.10  276.0   331.0   294.10  401.9   V10.51
....

我的情节脚本看起来像这样:

dat <- read.csv("data.csv", header =F)
g <- graph.data.frame(dat, directed = F)
colCount <- 1+ count.fields("dat.csv", sep = ",")
V(g)$label <- NA
set.seed(10)
par <- par()$mar; par(mar=rep(0, 4))
plot (g, layout = layout.fruchterman.reingold,
      vertex.frame.color = "#FFFFFF",
      vertex.size = 5,
      edge.width = 2.5+ (log(colCount)/max(log(colCount))),
      edge.color = "Grey60")

我尝试设置 vertex.color 失败。像这样的例子似乎默认为“浅蓝色”

 V(g)$color <- ifelse (V(g)$V1, "red", "blue")

有人能指出正确的方向吗?

【问题讨论】:

  • 示例数据看起来很乱。它是一张桌子吗?
  • “不成功”是什么意思? V(g)$V1 是什么? vertex.color 的行为与vertex.frame.color 完全一样,所以如果你可以设置其中一个,你也可以设置另一个。
  • 我认为数据是有效的。这是一个“集合列表”,行中的第一个元素是唯一的对象 ID,以下行项目是 0-n 个成员。 V(g)$V1 试图解决行的“第 1 列”(对象 ID)...我怀疑我的语法非常错误,因此我的 ifelse 语句被忽略了。我希望 ObjectID 顶点与成员的颜色不同。
  • 我不确定您所说的“有效”是什么意思。 graph.data.frame() 通常用于表,其中前两列定义边缘。所以你的第一个优势是从'CL1920'到'202.80'?您的示例中也没有 V1 属性,并且您在代码中引用了它。同样,您的示例(代码、数据或两者)搞砸了。
  • 博文中的样本数据代表数据集。是的,第一个边是 CL1920 到 202.80。第二个边缘是 CL1920 到 V66.7,依此类推。如果 CL1920 或 RM119041 或 RM38755 等,我想设置 vertex.color="red"。我不清楚如何为 g[[,1]] 分配一个 vertex.color,为 g[[,2:]] 分配另一个

标签: r colors conditional igraph vertex


【解决方案1】:

看来(来自 cmets)目标是根据顶点是否出现在 dat 数据框的第一列中来设置顶点颜色。这是一种方法:

V(g)$color <- ifelse(V(g)$name %in% dat[,1], "red", "blue")
plot(g)

【讨论】:

  • 做到了,谢谢。现在看起来很明显......感谢您的耐心!
最近更新 更多