在python中编码和渲染(网络)图
作者:互联网
下面的代码不会渲染我的图表.
import numpy
import matplotlib.pyplot as plt
import matplotlib as mpl
import pylab
import random
import scipy
from matplotlib.mlab import griddata
from pylab import *
from scipy import ndimage
def H(x,y,gamma):
val = HenonMap(x,y,1,1,0.2,gamma)
return val
def HenonIterate(x0,y0,n,gamma):
(x,y) = H(x0,y0,gamma)
for i in xrange (0,n):
(x,y)=H(x,y,gamma)
if (pow(x,2)) + (pow(y,2)) > 100:
return i
return n
def g():
x2=1000
y2=1000
max=100
u = zeros([x2,y2])
for x in range(x2):
for y in range(y2):
y0= .01*y-5.0
x0= -.01*x+5.0
u[x][y] = HenonIterate(x0,y0,max,1.03)
imshow(u)
show()
解决方法:
从你的代码看,我不确定你的想法,所以我很难直接使用它;但是,我可以向您展示如何在python中创建图形并在Matplotlib中渲染它们.
Networkx是一个出色的python库,用于生成图形,分析它们,并通过Matplotlib或Graphviz渲染它们.例如,
from matplotlib import pyplot as MPL
import networkx as NX # import networkx
您可以通过导入数据文件(Networkx有相当多的模块在格式之间进行转换)或使用Networkx的gtraph生成器之一在Networkx中创建图形.为了生成下面显示的图形,我创建了一种特殊类型的二项式随机图,erdos-renyi.
要在Networkx中创建图形,我只需调用图形构造函数并传入所需数量的节点和边缘创建概率.
G = NX.erdos_renyi_graph(10, .3)
在Networkx中渲染此图是微不足道的 – 只需调用draw并传入图形.在幕后,网络传递在Matplotlib中渲染图形所需的所有数据(例如,节点位置,样式属性,标签等),并为您调用Matplotlib的绘图方法,传递所有这些数据.与Matplotlib的唯一交互需要用户可以分别调用show或savefig将其呈现在屏幕上或文件中.
NX.draw(G)
MPL.show()
如果你想自己生成图形,然后将其交给Networkx通过Matplotlib进行渲染,这也很简单.例如,下面,我创建一个5 x 5 NumPy数组来表示邻接矩阵(表示稀疏图数据的最常见格式):
>>> G = NP.random.randint(0, 2, 25).reshape(5, 5)
>>> G
array([[0, 0, 1, 0, 1],
[1, 0, 0, 1, 1],
[0, 0, 1, 0, 1],
[0, 0, 1, 1, 1],
[0, 1, 0, 0, 1]])
现在使用标准Networkx构造函数将NumPy数组转换为Networkx图,用于有向图,DiGraph
>>> G1 = NX.DiGraph(G)
>>> len(G1.nodes())
5
>>> type(G1)
<class 'networkx.classes.digraph.DiGraph'>
您可以从邻接矩阵创建无向图,而不是有向图;只需使用适当的构造函数Graph
>>> G2 = NX.Graph(G)
这个图形在Matplotlib中呈现,与上面的图形完全相同 – 通过调用Networkx的draw方法然后调用Matplotlib的show来在屏幕上呈现它.
>>> NX.draw(G2)
>>> MPL.show()
标签:python,graph,graph-theory,numpy 来源: https://codeday.me/bug/20190621/1249887.html