【问题标题】:Synchronise colors between plot and legend在绘图和图例之间同步颜色
【发布时间】:2017-09-13 12:42:27
【问题描述】:

我有这个命令可以从 igraph 生成网络图:

plot(ig, layout=layout.fruchterman.reingold(ig),vertex.label=NA,vertex.label.color="black",vertex.frame.color="black",edge.color="black", vertex.color=rainbow(9)[data2$Group], main="MB Network")

data2 是另一个对象,包含有关 igraph 对象 ig 中顶点分组的信息。我想通过分组为顶点着色,然后为组颜色指南添加一个图例,所以我使用了以下命令:

legend("topleft",legend=unique(data2$Group),col=rainbow(9)[data2$Group])

但是,图例中使用的颜色与绘图的颜色不匹配。我应该如何纠正这个问题?

【问题讨论】:

  • 你能做一个可重现的小例子吗?这将有助于理解您的意思并帮助我们进行故障排除。一种可能性是颜色相同但顺序不正确。如果是这样,我想知道data2$Group 是否是一个因素,并且情节是按因素的水平对它们进行排序,而图例则按unique 之后的顺序排序。也许尝试levels 而不是unique
  • 问题出在图例中:你应该用实际使用的颜色替换rainbow(9)[data2$Group],所以我猜rainbow(9)

标签: r igraph


【解决方案1】:

我同意@Resh 的观点,即RColorBrewer 提供了出色的调色板!

这是一个著名的立方图的例子

require(igraph)
require(RColorBrewer)

我会先从外部定义调色板,我在调色板中选择了四种颜色,称为“Accent”。然后根据称为组的因素将每种颜色与八个顶点相关联。因为颜色是绿色、紫色、橙色和黄色,所以故意将因子的水平设置为 G、P、O 和 Y。这将帮助我们了解图表和图例中的颜色是否正确。

pal <- brewer.pal(4,"Accent")
g <- make_graph("Cubical")
Group <- gl(4, 2, labels = c("G","P","O","Y"))
vertex.col <- pal[Group]

plot(g, 
     layout=layout.fruchterman.reingold(g),
     vertex.label.color="black",
     vertex.frame.color="black",
     edge.color="black", 
     vertex.color=vertex.col, 
     main="Cubical")

legend("topleft",bty = "n",
       legend=levels(Group),
       fill=pal, border=NA)

结果……

【讨论】:

    【解决方案2】:

    谢谢大家的投入!

    我通过使用图例的 fill=rainbow(9)[unique(data2$Group)] 以某种方式纠正了这个问题。

    【讨论】:

      【解决方案3】:

      我过去使用过一个名为 RColorBrewer 的软件包,它可以为您创建颜色托盘。你看过了吗?

      一旦颜色匹配或相同,则图例也将具有相同的颜色。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-12
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 2021-08-09
        相关资源
        最近更新 更多