【问题标题】:Generate colors based on unique entries in another list in R根据 R 中另一个列表中的唯一条目生成颜色
【发布时间】:2017-03-13 23:00:57
【问题描述】:

我想使用调色板为 igraph 中的图形边缘定义颜色。我已经使用RColorBrewer 创建了调色板,并且需要根据边缘属性信息为每个边缘分配唯一的颜色。

这是我目前的尝试:

colrs<- brewer.pal(length(unique(E(g)$fruit)), "Accent")  
E(g)$color <- colrs[E(g)$fruit]  #Does not work
E(g)$color
  [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [40] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [79] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA

有没有办法可以将E(g)$fruit 用作colrs 列表的索引?

E(g)$fruit有4种水果:

unique(E(g)$fruit)
"Apple"       "Orange"      "Grapes"     "Pear"

因此,根据每条边的 fruit 类型,它应该从colrs 列表中获取相应的颜色,这样所有带有“Apple”的边缘都具有相同的颜色,所有带有“Apple”的边缘都具有相同的颜色橙色”具有相同的颜色等等。我最终将使用以下代码绘制图表:

plot(g,layout=layout.fruchterman.reingold, vertex.color='grey80', vertex.label.color="black", edge.color=E(g)$color)

这是我的图表边缘列表的示例:

  from   to    fruit
1 A      B     Apple
2 A      C     Apple
3 B      C     Grapes
4 D      B     Pear
5 D      C     Orange

【问题讨论】:

    标签: r colors igraph


    【解决方案1】:

    用唯一的E(g)$fruit 命名您的colrs 向量:

    df <- read.table(header=T, text="
      from   to    fruit
    1 A      B     Apple
    2 A      C     Apple
    3 B      C     Grapes
    4 D      B     Pear
    5 D      C     Orange")
    library(igraph)
    library(RColorBrewer)
    g <- graph_from_data_frame(df)
    colrs<- brewer.pal(length(unique(E(g)$fruit)), "Accent")  
    names(colrs) <- unique(E(g)$fruit)
    E(g)$color <- colrs[E(g)$fruit]  #Does not work
    E(g)$color
    # [1] "#7FC97F" "#7FC97F" "#BEAED4" "#FDC086" "#FFFF99"
    plot(g,layout=layout.fruchterman.reingold, vertex.color='grey80', vertex.label.color="black", edge.color=E(g)$color)
    

    【讨论】:

      【解决方案2】:

      我需要类似的代码,但我需要更大的颜色托盘(“Accent”中提供了 8 个以上),我们可以为此使用 colorRampPalette 函数。这样我们就可以根据需要创建自己的调色板。

      colourCount = length(unique(g$fruit))
      getPalette = colorRampPalette(brewer.pal(9, "Set1"))
      colrs<- getPalette(colourCount)
      names(colrs) <- unique(E(g)$fruit)
      E(g)$color <- colrs[E(g)$fruit]  
      E(g)$color
      plot(g,layout=layout.fruchterman.reingold, vertex.color='grey80', vertex.label.color="black", edge.color=E(g)$color)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-06
        • 1970-01-01
        • 2012-05-02
        • 2020-05-24
        • 1970-01-01
        • 2019-08-27
        • 1970-01-01
        相关资源
        最近更新 更多