You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R的igraph中按数据类型为顶点设不同颜色并显示名称

解决方案

关键修改点

  • 按资产类型设置顶点颜色:先为每个顶点标记所属类型,再根据类型分配对应颜色
  • 仅显示文字顶点:将顶点形状设为"none",通过顶点标签展示名称,用标签颜色区分类型
  • 修正颜色赋值逻辑:替换原代码中未定义的变量,改用顶点索引范围直接匹配资产类型

修改后完整代码

library(Hmisc)                                        # 用于相关矩阵
library(corrplot)                                     # 用于相关矩阵
library("Spillover")
library(readxl)
library("xts")
library("zoo")    
library("ggplot2")
library("nets")
library("MASS")
library("igraph")
library("reshape")    # 用于"melt"函数/聚类网络
library("writexl")


# 计算动态相依性(直接边表示格兰杰因果关系)
# 计算同期相依性(间接边表示偏相关关系)
stock          <-  table[1:55, 1:55]
forex          <-  table[56:95, 56:95]
commodities    <-  table[96:116, 96:116] 

dim(stock); dim(forex); dim(commodities) 
View(stock); 
View(forex); 
View(commodities) 

# 构建完整网络
network.spill <- graph.adjacency(table, mode='directed')

# 计算网络指标
degree   <- degree(network.spill)                                             # 邻接边数量
between  <- betweenness(network.spill)
close    <- closeness(network.spill, mode = "all")
autorsco <- authority.score(network.spill)$vector
eccentry <- eccentricity(network.spill, mode = "all")
measures <- cbind(as.matrix(degree), as.matrix(between), as.matrix(close), as.matrix(autorsco), as.matrix(eccentry))
View(measures)

# -------------------------- 核心修改部分 --------------------------
# 1. 为每个顶点分配类型标签
V(network.spill)$type <- case_when(
  V(network.spill)$name %in% rownames(table)[1:55] ~ "stock",
  V(network.spill)$name %in% rownames(table)[56:95] ~ "forex",
  V(network.spill)$name %in% rownames(table)[96:116] ~ "commodities"
)

# 2. 根据类型设置标签颜色(隐藏顶点后,用标签颜色区分分组)
V(network.spill)$label.color <- ifelse(V(network.spill)$type == "stock", "gold",
                                       ifelse(V(network.spill)$type == "forex", "red", "darkgreen"))

# 3. 隐藏圆形顶点,仅显示文字标签
V(network.spill)$shape <- "none"
# 调整标签大小(可按需修改)
V(network.spill)$label.cex <- 0.6

# 边的设置保留原逻辑
E(network.spill)$name=1:116
# -------------------------------------------------------------------

# 绘制网络图
par(mfcol = c(1, 1))
plot(network.spill, 
     layout = layout_nicely(network.spill), 
     edge.curved = 0.2, 
     edge.arrow.mode=0.5,
     edge.arrow.size=1.5)

代码说明

  • 类型标签分配:通过case_when匹配顶点名称对应的资产类型,确保每个顶点被正确归类
  • 颜色设置:股票用金色、外汇用红色、大宗商品用深绿色,可自行修改颜色代码适配需求
  • 隐藏顶点:vertex.shape = "none"取消圆形顶点显示,仅保留文字标签,标签颜色直接对应资产类型,直观区分不同分组

内容的提问来源于stack exchange,提问作者Diego Gómez Melo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 11:40:40