r - R中igraph顶点值的颜色条图例
问题描述
我是 R 的新手,我开始使用 igraph 进行图形可视化。下面的示例创建了一个由 10 个顶点组成的简单网络,并根据颜色值对它们进行着色(在这种情况下,为简单起见,我将其设置为与顶点的 id 相同)。
library(igraph)
vertices <- 1:10
first <- 1:10
second <- c(2:10,1)
edges = cbind(first,second)
color = 1:10
net = graph_from_data_frame(edges,vertices=vertices ,directed=F )
V(net)$color = color
plot(net)
但是,从该图中,尚不清楚哪些颜色对应于哪些数字:
为了解决这个问题,我尝试创建可以在文档和在线中找到的各种图例。以下面的代码为例:
legend("bottom", legend=levels(as.factor(color)), bty = "n", cex =
1.5, pt.cex = 3, pch=20, col = color , horiz = FALSE , inset = c(0.1,
-0.3)
但是在这种情况下,结果是混乱的,使图片模糊,并且不提供将节点上的值范围映射到色谱的连续颜色条。我能找到的其他选择也不是更好。
您是否知道如何以连续颜色条的形式制作图例,放置在图片下方或右侧(使其不覆盖图片的任何部分)?理想情况下,颜色条应该显示整个连续的颜色光谱和与颜色相对应的一些值(至少是极端值)?你碰巧知道如何实现这一目标吗?
谢谢您的帮助!
解决方案
感谢 ealbsho93,我能够产生以下解决方案。它创建一个调色板,然后将图形上顶点上的值映射到调色板并显示它。这并不简单,但结果看起来要好得多(见下文)
rm(list=ls())
library(igraph)
library(fields)
vertices <- 1:10
first <- 1:10
second <- c(2:10,1)
edges = cbind(first,second)
net = graph_from_data_frame(edges,vertices=vertices ,directed=F )
#Here we create a sample function on the vertices of the graph
color_num = 10:1
#create a color palette of the same size as the number of vertices.
jet.colors <- colorRampPalette( rainbow( length( unique(color_num) ) ) )
color_spectrum <- jet.colors( length( unique(color_num ) ) )
#and over here we map the pallete to the order of values on vertices
ordered <- order(color_num)
color <- vector(length = length(ordered),mode="double")
for ( i in 1:length(ordered) )
{
color[ ordered[i] ] <- color_spectrum [ i ]
}
V(net)$color = color
#Display the graph and the legend.
plot(net)
image.plot(legend.only=T, zlim=range(color_num), col=color_spectrum )
如果有更好的解决方案,请告诉我。否则,这个似乎可以使用。
推荐阅读
- machine-learning - 在一个句子中使用 word2vec
- javascript - 在 Windows 10 1809 上的 IE 11 上运行 selenium 测试 - 没有打开新窗口
- java - Docker Compose 链接的微服务不可发现
- python - 使用自定义顺序对熊猫中的列进行排序以获取未知数量的列
- verilog - 关于异步复位如何在复位边缘工作的问题
- excel - 尝试按字符串表号排序
- javascript - 数组未正确索引
- javascript - 有什么方法可以删除 gojs 中的 nodeArrayelements
- r - 有没有办法在 R 中的数据框组内创建索引?
- libssh2 - libssh 与 libssh2 的主要区别是什么?