如何解决如何使用cscale和viridis调色板为igraph图着色连续变量的颜色?
我正在igraph中绘制一个生物运输网络(在R中),我想基于边缘属性(在我的情况下为连续变量,称为“宽度”)以颜色渐变显示边缘。我不喜欢从以下位置获得的默认调色板:
plot(graph,edge.color=E(graph)$width)
在查看igraph绘图帮助时,我找到了一种从scales软件包中使用cscale更改此调色板的方法:
plot(graph,edge.color=cscale(E(graph)$width,palette = seq_gradient_pal(low = "yellow",high = "red")))
那很好,可能会坚持下去。但是我想知道我是否可以使用翠绿或浅色调色板。我还没有弄清楚该怎么做。主要问题是我无法为所有边缘分配颜色编码。例如,如果我只是这样做:
plot(graph,palette = viridis_pal())
我收到此警告:
In seq.default(begin,end,length.out = n) :
first element used of 'length.out' argument
实际上,第一种颜色已应用到所有边缘
如果我尝试指定所有边缘的长度:
plot(graph,palette = viridis_pal()(ecount(graph))
我收到此错误消息:
Error in palette(x) : invalid argument type)
有什么想法吗?
解决方法
我遇到了类似的问题 --- 我想使用 viridis 调色板为边缘着色 --- 我用 SymbolixAU's colourvalues 解决了这个问题。
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)
最诚挚的感谢,SymbolixAU!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。