Python中的弦图

5

你好,我有一个类似于以下结构的DataFrame:

Source   Target    Value     
A        B         10       
A        C         5    
A        D         15
A        E         20
A        F         3
B        A         3
B        G         15
F        D         13
F        E         2
E        A         20
E        D         6

我想使用 Python 绘制这个和弦图:

enter image description here

我在以下链接中找到了这个和弦图:https://www.data-to-viz.com/graph/chord.html。它说明此绘图是使用 circlize 库创建的(我相信这是一个 R 库)。是否也可以在 Python 中进行绘制?

我还希望能够为每个元素(我的情况下为 A 到 G)选择颜色并在圆周上书写,如示例图所示。

这是另一个 DataFrame 的示例,其中包含颜色:

Name   Color
A      Red
B      Orange
C      Yellow
D      Green
E      Blue
F      Purple

如果可能的话,要有箭头指向来帮助区分源和目标,就像样例图中一样。

我找不到一个现成的Python库来完成这个工作。


1
@ScottBoston的视频不可用。 - Josir
您可以使用Python在d3js中创建弦图。另请参阅此帖子:https://stackoverflow.com/questions/65344303/circular-chord-diagram-in-python/73985381#73985381 - erdogant
5个回答

5

在@mportes的答案基础上,

  • 现在Chord库是一个付费服务,包含在plotapi中。
  • 在plotly中绘制弦图似乎相当复杂,示例仅适用于v3。

因此,对我而言最好的解决方案是使用Holoviews。 这里有一个示例图。我不知道是否可以添加箭头,但从源到目标的方向很容易识别,因为弦始终具有源颜色。


HoloViews 对我来说非常好用。坦白地说,我对 HoloViews 的能力感到惊讶,使用 Grammar of Graphics 框架编码是一种享受。谢谢并点赞! - Sun Bee

3
您分享的链接页面包含一个“构建自己”的部分,其中有一个指向Python Gallery的链接。在这里,您可以找到三种使用Python制作弦图的替代方法:
  • 使用Chord库
  • 使用Bokeh库
  • 使用Plotly库

谢谢,这很有帮助!Bokeh库已经不再支持弦图,但是HoloViews接手了Bokeh的工作,并且HoloViews中的弦图非常美观、优雅和信息丰富。感谢并点赞。 - Sun Bee

1

1
你可以尝试使用D3Blocks包来绘制弦图。
D3Blocks基于d3 javascript(d3js)的图形功能,只需几行Python代码就能创建最具视觉吸引力和实用性的图表!文档页面包含了关于这些块的工作原理以及许多示例的详细信息。
文档中的示例: 示例输入: 输入数据集是一个包含三列(源、目标和权重)的DataFrame。 生成弦图的代码:
# Load d3blocks
from d3blocks import D3Blocks
#
# Initialize
d3 = D3Blocks(chart='Chord', frame=False)
#
# Import example
df = d3.import_example('energy')
#
# Node properties
d3.set_node_properties(df, opacity=0.2, cmap='tab20')
d3.set_edge_properties(df, color='source', opacity='source')
#
# Show the chart
d3.show()
#
# Make some edits to highlight the Nuclear node
# d3.node_properties
d3.node_properties.get('Nuclear')['color']='#ff0000'
d3.node_properties.get('Nuclear')['opacity']=1
# Show the chart
#
d3.show()
# Make edits to highlight the Nuclear Edge
d3.edge_properties.get(('Nuclear', 'Thermal generation'))['color']='#ff0000'
d3.edge_properties.get(('Nuclear', 'Thermal generation'))['opacity']=0.8
d3.edge_properties.get(('Nuclear', 'Thermal generation'))['weight']=1000
#
# Show the chart
d3.show()

和弦图表:

enter image description here


0
你可以尝试 PlotAPI(收费)- 它作为 Python 包可用。
这里是一个从概念到 Python 代码的 Chord 图表视频 链接

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接