python伪代码求二次方程式画图_python 学习笔记2 --画图(networkx)

绘制基本网络图

绘制划分后的社区

绘制基本网络图

用matplotlib绘制网络图

基本流程:

1. 导入networkx,matplotlib包

2. 建立网络

3. 绘制网络 nx.draw()

4. 建立布局 pos = nx.spring_layout美化作用

最基本画图程序

import import networkx as nx #导入networkx包

import matplotlib.pyplot as plt

G = nx.random_graphs.barabasi_albert_graph(100,1) #生成一个BA无标度网络G

nx.draw(G) #绘制网络G

plt.savefig("ba.png") #输出方式1: 将图像存为一个png格式的图片文件

plt.show() #输出方式2: 在窗口中显示这幅图像

networkx 提供画图的函数有:

draw(G,[pos,ax,hold])

draw_networkx(G,[pos,with_labels])

draw_networkx_nodes(G,pos,[nodelist]) 绘制网络G的节点图

draw_networkx_edges(G,pos[edgelist]) 绘制网络G的边图

draw_networkx_edge_labels(G, pos[, ...]) 绘制网络G的边图,边有label

---有layout 布局画图函数的分界线---

draw_circular(G, **kwargs) Draw the graph G with a circular layout.

draw_random(G, **kwargs) Draw the graph G with a random layout.

draw_spectral(G, **kwargs) Draw the graph G with a spectral layout.

draw_spring(G, **kwargs) Draw the graph G with a spring layout.

draw_shell(G, **kwargs) Draw networkx graph with shell layout.

draw_graphviz(G[, prog]) Draw networkx graph with graphviz layout.

networkx 画图参数:

- node_size: 指定节点的尺寸大小(默认是300,单位未知,就是上图中那么大的点)

- node_color: 指定节点的颜色 (默认是红色,可以用字符串简单标识颜色,例如'r'为红色,'b'为绿色等,具体可查看手册),用“数据字典”赋值的时候必须对字典取值(.values())后再赋值

- node_shape: 节点的形状(默认是圆形,用字符串'o'标识,具体可查看手册)

- alpha: 透明度 (默认是1.0,不透明,0为完全透明)

- width: 边的宽度 (默认为1.0)

- edge_color: 边的颜色(默认为黑色)

- style: 边的样式(默认为实现,可选: solid|dashed|dotted,dashdot)

- with_labels: 节点是否带标签(默认为True)

- font_size: 节点标签字体大小 (默认为12)

- font_color: 节点标签字体颜色(默认为黑色)

e.g. nx.draw(G,node_size = 30, with_label = False)

绘制节点的尺寸为30,不带标签的网络图。

布局指定节点排列形式

pos = nx.spring_layout

建立布局,对图进行布局美化,networkx 提供的布局方式有:

- circular_layout:节点在一个圆环上均匀分布

- random_layout:节点随机分布

- shell_layout:节点在同心圆上分布

- spring_layout: 用Fruchterman-Reingold算法排列节点(这个算法我不了解,样子类似多中心放射状)

- spectral_layout:根据图的拉普拉斯特征向量排列节

布局也可用pos参数指定,例如,nx.draw(G, pos = spring_layout(G)) 这样指定了networkx上以中心放射状分布.

绘制划分后的社区

先看一段代码,代码源自site

partition = community.best_partition(User)

size = float(len(set(partition.values())))

pos = nx.spring_layout(G)

count = 0.

for com in set(partition.values()) :

count = count + 1.

list_nodes = [nodes for nodes in partition.keys()

if partition[nodes] == com]

nx.draw_networkx_nodes(G, pos, list_nodes, node_size = 50,

node_color = str(count / size))

nx.draw_networkx_edges(User,pos,with_labels = True, alpha=0.5 )

plt.show()

communit.best_partition 是社区划分方法,算法是根据Vincent D.Blondel 等人于2008提出,是基于modularity optimization的heuristic方法.

partition的结果存在字典数据类型:

{'1': 0, '3': 1, '2': 0, '5': 1, '4': 0, '6': 0}

单引号里的数据是key,也就是网络中节点编号。

冒号后面的数值,表示网络中节点的编号属于哪个社区。也就是社区标号。如'6': 0表示6节点属于0社区

list_nodes = [nodes for nodes in partition.keys()

if partition[nodes] == com]

每次循环list_nodes结果是社区i对应的用户编号。

如第一次循环结果是com = 0, list_nodes= ['1','2','4','6']

第二次循环的结果是com = 1, list_nodes = ['3','6']

这样每次循环,画出一个社区的所有节点:

nx.draw_networkx_nodes(G, pos, list_nodes, node_size = 50,

node_color = str(count / size))

循环结束后通过颜色来标识不同社区

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用PythonNetworkX库来实现根据图的权重画拓扑图的功能。下面是一个简单的示例代码: ```python import networkx as nx import matplotlib.pyplot as plt # 创建图 G = nx.Graph() # 添加节点 G.add_nodes_from(['A', 'B', 'C', 'D']) # 添加边和权重 G.add_edge('A', 'B', weight=2) G.add_edge('A', 'C', weight=3) G.add_edge('B', 'C', weight=1) G.add_edge('B', 'D', weight=4) G.add_edge('C', 'D', weight=5) # 获取边的权重 edge_weights = nx.get_edge_attributes(G, 'weight') # 设置边的粗细 edge_widths = [0.1 * G[u][v]['weight'] for u, v in G.edges()] # 绘制图形 pos = nx.circular_layout(G) nx.draw_networkx_nodes(G, pos, node_color='lightblue', node_size=500) nx.draw_networkx_edges(G, pos, width=edge_widths, edge_color='gray') nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_weights, font_color='red') nx.draw_networkx_labels(G, pos, font_size=16, font_family='sans-serif') # 显示图形 plt.axis('off') plt.show() ``` 在上面的代码中,我们首先创建了一个包含4个节点的图,并添加了5条带权重的边。然后,我们使用`nx.get_edge_attributes`函数获取每条边的权重,并将其存储在`edge_weights`字典中。接着,我们计算每条边的粗细,将其存储在`edge_widths`列表中。最后,我们使用`nx.draw_networkx_nodes`和`nx.draw_networkx_edges`函数绘制图形,并使用`nx.draw_networkx_edge_labels`和`nx.draw_networkx_labels`函数添加标签。 运行上面的代码,你会得到一个带权重的拓扑图,其中边的粗细代表了它们的权重大小。你可以根据需要修改节点的颜色、边的颜色和样等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值