为了构建有向网络图,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当前的方法似乎正在使用注释。当边缘很少且可以手动填充每个边缘时可以使用此方法...
下面是使用循环在Plotly图中创建箭头的示例,它很容易适用于NetworkX有向图的可视化。