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

如何将circlize绘制的弦图转换为Plotly对象?

将circlize弦图转换为Plotly对象的实现方法

circlize生成的弦图是基于grid系统的静态图形,无法直接转换为Plotly交互式对象,需要通过Plotly原生语法重新构建。以下是针对你提供的代码的具体实现方案:

实现步骤与代码

1. 准备数据与依赖包

首先加载所需工具包,复用你原始的数据生成逻辑,同时补全颜色映射中缺失的节点颜色(比如原始col.pal里没有WV的颜色):

# 加载必要包
library(plotly)
library(tidyr)
library(dplyr)

# 复用原始数据生成代码
random_values <- c(500:100)
random_sample <- sample(random_values,15)

# 补全节点颜色映射
col.pal = c(Skoda = "red",
            Honda = "green",
            Ferrari = "blue",
            Tesla = "grey",
            Toyota = "maroon",
            Phoenix = "grey",
            Tucson = "black",
            Sedona = "grey",
            WV = "orange") # 补充WV的颜色

Sample_Matrix <- matrix( 
  random_sample,
  nrow = 5,
  dimnames = list(c("Skoda","WV","Ferrari","Tesla","Toyota"),
                  c("Phoenix","Tucson","Sedona")))

2. 转换数据格式为Plotly所需结构

Plotly的弦图需要源节点、目标节点、连接值的长格式数据,同时需要为每个节点分配数字索引:

# 将矩阵转换为长格式
df <- as.data.frame(Sample_Matrix) %>%
  tibble::rownames_to_column("source") %>%
  pivot_longer(cols = -source, names_to = "target", values_to = "value")

# 获取所有唯一节点并生成索引(Plotly从0开始计数)
nodes <- unique(c(df$source, df$target))
node_indices <- setNames(seq_along(nodes)-1, nodes)

# 转换为Plotly兼容的数据格式
df_plotly <- df %>%
  mutate(source_id = node_indices[source],
         target_id = node_indices[target])

3. 绘制Plotly交互式弦图

使用Plotly的chord类型绘制交互式弦图,并应用颜色映射:

# 生成Plotly弦图对象
p <- plot_ly(
  type = "chord",
  source = df_plotly$source_id,
  target = df_plotly$target_id,
  value = df_plotly$value,
  node = list(
    pad = 15,
    thickness = 20,
    line = list(color = "black", width = 0.5),
    label = nodes,
    color = unname(col.pal[nodes])
  )
) %>%
  layout(
    title = "交互式弦图",
    showlegend = FALSE
  )

# 查看结果
p

这段代码会生成一个交互式的弦图,支持悬停查看数值、缩放拖拽等Plotly原生交互功能。

内容的提问来源于stack exchange,提问作者silent_hunter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 23:46:33