NetworkX:如何用tex符号绘制标签节点/边?

时间:2015-12-03 16:48:38

标签: ipython ipython-notebook graphviz networkx

很简单,我试图绘制一个像这样的简单状态机:

enter image description here

我对任何形式的策划持开放态度,允许围绕这样的情节灵活。

这是我到目前为止所做的:

import networkx as nx
from nxpd import draw
G = nx.MultiDiGraph(with_labels=False,rankdir='LR')
G.graph['dpi'] = 120
G.add_node(1,label=r"$\sigma_1$",shape = 'circle')
G.add_node(2,label=r"$\sigma_2$",shape = 'circle')
G.add_edge(1,1,headport='nw',tailport='sw',label='sp')
G.add_edge(2,2,headport='se',tailport='ne')
G.add_edge(1,2,label='1-sp')
draw(G, show='ipynb')

这显然与我正在尝试的事情相去甚远。

有些事情无效:

  • headport='nw',tailport='sw'正在做一些奇怪的事情
  • 显然,r"$\sigma_2$"没有输出所需的基于tex的符号。

如何绘制如上所示的图表?

尝试使用matplotlib和networkx实现相同的目标

import matplotlib.pyplot as plt
import networkx as nx

%matplotlib inline

G=nx.MultiDiGraph()
pos = {0:(100,100),1:(0,0)}
G.add_node(0)
G.add_node(1)
G.add_edge(0,0)
G.add_edge(0,1)
G.add_edge(1,0)

labels={}
labels[0]=r'$\sigma_1$'
labels[1]=r'$\sigma_2$'
nx.draw_networkx_labels(G,pos,labels)
plt.axis('off')
plt.show() # display

由于某种原因,输出一个空白屏幕?

1 个答案:

答案 0 :(得分:1)

我不熟悉nxpdimport nxpd对我不起作用,所以我的计算机上没有它,所以我正在使用{{1} }命令。

nx

enter image description here

(注意---自我边缘没有出现在这里,但我想你知道如何解决这个问题。)

我认为你的最后一段代码输出一个空白屏幕的原因是因为这个已知错误(不是networkx的错误)pylab/networkx; no node labels displayed after update。如果您保存图形,标签将在那里。