Python实现网络图节点大小随度数变化

Python网络图,原节点label不规则,如何实现节点大小随节点度数的变化而变化

欢迎大家交流,本人邮箱:17376598018@163.com:

  • networkx
  • matplotlib
  • 无序label处理
  • 节点大小控制
  • 指定显示部分节点名称

代码块

代码块语法遵循标准markdown代码,例如:

import numpy as np
import xlrd
import networkx as nx 
import matplotlib.pyplot as plt

# 自定义坐标轴
# plt.axis([-0.05,1.05,-0.05,1.05])

# 不显示坐标轴刻度(下面三行)
fig, ax=plt.subplots()  
ax.set_xticks([])  
ax.set_yticks([]) 

# 数据导入,预处理
List = []
def open_excel(file):
    try:
        sheet_data = xlrd.open_workbook(file)
        return sheet_data
    except Exception as e:
        print(str(e))

def praise_excel(file):
    sheet_data = open_excel(file)
    sheet = sheet_data.sheets()[0]    #读取sheet
    my_queues0 = sheet.col_values(0)   #读取1列
    my_queues1 = sheet.col_values(1)   #读取2列
    nrows = sheet.nrows #获取行数
    for i, j in zip(my_queues0,my_queues1):
        x = (int(i),int(j))
        List.append(x)
    # print(List)


praise_excel("D:/PycharmProjects/Draw/Network_Plot.xlsx")

# 列表中有元组的,默认对元组的第一列进行排序
temp1 = sorted(List)
# 补充:列表中,使用tuple对第二列元素进行排序
temp2 = sorted(List, key=lambda x:x[1])
# print('temp1: \n',temp1)
# print(temp2)
matrix_temp1 = np.array(temp1)

# print('matrix_temp1: \n',matrix_temp1)

temp1_nrows = matrix_temp1.shape[0]
# print(temp1_nrows)

G=nx.Graph(List)
# pos = nx.spring_layout(G)
de = G.degree()

# 下面是对无序Label做处理,并指定节点显示名称
temp = sorted(de.keys())
a = []
for j in temp:
    i = temp.index(j)
    a.append((i,j))
# print('a:',a)
matrix_a = np.array(a)
# print(matrix_a)
a_nrows = matrix_a.shape[0]
# print(a_nrows)
# print(matrix_a)

for i in range(a_nrows):
    for j in range(temp1_nrows):
        if matrix_a[i][1] == matrix_temp1[j][0]:
            matrix_temp1[j][0]=matrix_a[i][0]
# print(matrix_temp1)
matrix_temp3 = matrix_temp1[np.lexsort(matrix_temp1.T)]
# print(matrix_temp3)
temp3_nrows = matrix_temp3.shape[0]
# print(temp3_nrows)
for i in range(a_nrows):
    for j in range(temp3_nrows):
        if matrix_a[i][1] == matrix_temp3[j][1]:
            matrix_temp3[j][1] = matrix_a[i][0]
# print(matrix_temp3)
# 将matrix_temp3里的数据类型改为tuple
tt = [tuple(each) for each in matrix_temp3]
print(tt)

# tt为处理后的数据
G=nx.Graph(tt)
pos = nx.spring_layout(G)
de = G.degree()
print(de)

# 指定前三个显示名称
array = np.zeros(157)
j = 0
for i in range(len(de.keys())):
    print("key", i, "value:",de[i])
    array[j] = de[i]
    j+=1
arg = np.argsort(-np.array(array))
print("arg:",arg)
labels = {}
pp = ['NRAS','NAE1','HRAS']
for index in range(3):
    labels[arg[index]] = pp[index]

# de2下面赋给节点大小
de2 = [de[v]*8 for v in sorted(de.keys(), reverse=False)] 
nx.draw_networkx_labels(G,pos,labels, font_size=6,font_color='white')
nx.draw_networkx(G, pos, node_size=de2, with_labels = False, node_color='#A52A2A', linewidths=None, width=1.0, edge_color ='#858585')
plt.savefig("Network.pdf")
plt.show()

结果

这里写图片描述

浏览器兼容

  1. 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome。
  2. IE9以下不支持
  3. IE9,10,11存在以下问题
    1. 不支持离线功能
    2. IE9不支持文件导入导出
    3. IE10不支持拖拽文件导入

  • 11
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值