为了构建一个有向网络图,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)
我也愿意尝试其他可视化软件包,如果在散景或其他情况下有好的方法的话。
4条答案
按热度按时间qvtsj1bj1#
下面是一个使用循环在Plotly图中创建箭头的示例,它很容易应用于有向图的NetworkX可视化。
55ooxyrt2#
我是gravis的作者,这是Python中的一个交互式图形可视化包,它可以识别来自几个网络分析包(如NetworkX、igraph或graph-tool)的图形对象。
下面是一个用NetworkX创建有向图并用gravis将其可视化的最小示例。
ippsafx73#
是的,我同意注解解决方案并不是那么有效。这对你想做的事情有用吗:https://github.com/redransil/plotly-dirgraph
示例:directed graph output
gg58donl4#
根据@Aspire的回答,示例中有边/箭头配置和结果图像:
产量:x1c 0d1x