R中igraph顶点上的值的色条图例

时间:2019-07-15 18:02:24

标签: 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)

但是从这个图上还不清楚哪些颜色对应于 哪个数字:

https://www.khronos.org/opengl/wiki/Creating_an_OpenGL_Context_(WGL)#Proper_Context_Creation

为此,我尝试创建各种 我可以在文档和在线中找到传说。采取 实例下面的代码:

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)

但是在这种情况下,结果是混乱的,使图片模糊不清,并且没有提供连续的颜色条,该颜色条会将节点上的值范围映射到色谱。我能够找到的其他选择并不更好。

enter image description here

您知道如何以连续彩条的形式制作图例,该图条位于图片的下方或右侧(以使其不覆盖图片的任何部分)?理想情况下,颜色条应显示整个连续的颜色光谱以及一些与颜色相对应的值(至少是极端值)? 您碰巧知道如何实现这一目标吗?

谢谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您应该通过kokkenbaker查看此答案,尽管它有点麻烦,但这可能正是您所需要的。 How to add colorbar with perspective plot in R

答案 1 :(得分:0)

感谢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 )

enter image description here

如果有更好的解决方案,请告诉我。除此之外,这个似乎可以使用。