如何在Python上有效地创建交互式有向网络图(带箭头)?

问题描述 投票:1回答:1

为了构建有向网络图,Plotly当前的方法似乎正在使用注释。当边缘很少且一个可以通过图形布局手动填充每个边缘(例如this example)时,此方法有效。

但是如果我要创建一个更加复杂的图形,是否有一种很好的方法来迭代定义所有边缘的箭头坐标(我只能想到构造一个字符串然后使用eval(),尽管我知道这很不好实践)? (编辑:似乎这种将迭代生成的dict()定义字符串进行级联的方法不起作用-仅适用于一个dict()定义)

编辑:添加代码段以更好地说明这种情况(将eval()行注释掉以进行比较):

import plotly.offline as py 
import plotly.graph_objs as go 

trace = go.Scatter( 
    x=[1, 2, 2, 1], 
    y=[3, 4, 3, 4], 
    mode='markers',
    marker=dict(size=[100, 100, 100, 100])
)

fig = go.Figure(
    data=[trace],
    layout=go.Layout(
        annotations = [
            dict(
                ax=1, ay=3, axref='x', ayref='y',
                x=2, y=4, xref='x', yref='y'
            ),
            # eval("dict(ax=2, ay=3, axref='x', ayref='y', x=1, y=4, xref='x', yref='y')")
        ]
    )
) 
py.plot(fig)

我也愿意尝试其他可视化程序包,如果在Bokeh或其他程序中有很好的方法可以这样做的话。

为了构建有向网络图,Plotly当前的方法似乎正在使用注释。当边缘很少且可以手动填充每个边缘时可以使用此方法...

python plotly networkx directed-graph
1个回答
4
投票

下面是使用循环在Plotly图中创建箭头的示例,它很容易适用于NetworkX有向图的可视化。

© www.soinside.com 2019 - 2024. All rights reserved.