如何使用cscale和viridis调色板对IGRAPHE绘图的连续变量进行颜色缩放?

如何使用cscale和viridis调色板对IGRAPHE绘图的连续变量进行颜色缩放?,r,igraph,R,Igraph,我在igraph(在R中)中绘制一个生物trasnport网络,其中我希望基于边缘属性(在我的例子中是一个称为“宽度”的连续变量)以颜色渐变显示边缘。我不喜欢在中获得的默认调色板: plot(graph, edge.color=E(graph)$width) 查看igraph plot帮助,我找到了一种使用scales软件包中的cscale更改此调色板的方法: plot(graph, edge.color=cscale(E(graph)$width,palette = seq_gradien

我在igraph(在R中)中绘制一个生物trasnport网络,其中我希望基于边缘属性(在我的例子中是一个称为“宽度”的连续变量)以颜色渐变显示边缘。我不喜欢在中获得的默认调色板:

plot(graph, edge.color=E(graph)$width)

查看igraph plot帮助,我找到了一种使用scales软件包中的cscale更改此调色板的方法:

plot(graph,
edge.color=cscale(E(graph)$width,palette = seq_gradient_pal(low = "yellow",high = "red")))

这很好,可能会坚持下去。然而,我想知道我是否可以使用viridis或colorbrewer调色板。我还不知道怎么做。主要问题是我无法将颜色编码分配给所有边。例如,如果我只是这样做:

plot(graph,
 edge.color=cscale(E(graph)$width,palette = viridis_pal())

我得到这个警告:

In seq.default(begin, end, length.out = n) :
  first element used of 'length.out' argument
实际上,第一种颜色应用于所有边

如果尝试指定所有边的长度:

plot(graph,
 edge.color=cscale(E(graph)$width,palette = viridis_pal()(ecount(graph))

我收到以下错误消息:

Error in palette(x) : invalid argument type)
有什么想法吗?

我有一个类似的问题——我想用viridis调色板给边缘上色——我解决了这个问题

库(igraph)
图书馆(绿色)
图书馆(价值观)
#以成对距离读入数据帧,
#转换为下三角矩阵,然后
#将列名隐藏起来以备将来使用。那么,

请提供一个可复制的例子,太好了!!谢谢你的发帖!
library(igraph)
library(viridis)
library(colourvalues)


# read in data frame with pairwise distances, 
# convert to lower triangular matrix, and 
# stash the column names for later use.  Then,

g <- graph_from_adjacency_matrix(m,mode="lower",weighted=TRUE,add.colnames=TRUE)
V(g)$name <- colnames(m)
E(g)$color <- colour_values(E(g)$weight,palette = "viridis")
plot(g, vertex.label=V(g)$name,edge.width = E(g)$weight/10, edge.label=E(g)$weight,edge.color=E(g)$color)