networkx画弯曲的边
networkx里面自绘的边都是直的,当多个节点处于同一条直线还有连边的时候就特别难看。如果能否让networkx画弯曲的边,那么这种情况就可以好办的多了。
思路为:
- 绘制节点,获取节点的pos坐标。
- 在存在边的两个节点之间,使用贝塞尔插值生成两个节点之间曲线的节点坐标。
- 使用LineCollection绘制线即可。
下面为整理的代码:
__author__ = 'jmh081701'
import matplotlib.pyplot as plt
import numpy as np
import bezier
from matplotlib.collections import LineCollection
import networkx as nx
import randomG = nx.Graph()
G.add_nodes_from([0,1,2,3])
G.add_edge(0,1,weight=0.1)G.add_edge(1,2,weight=0.2)G.add_edge(0,2,weight=0.3)
G.add_edge(1,3,weight=0.4)
graph = G
def curved_line(x0, y0, x1, y1, eps=0.2, pointn=30):x2 = (x0+x1)/2.0 + 0.1 ** (eps+abs(x0-x1)) * (-1) ** (random.randint(1,4))y2 = (y0+y1)/2.0 + 0.1 ** (eps+abs(y0-y1)) * (-1) ** (random.randint(1,4))nodes = np.asfortranarray([[x0, x2, x1],[y0, y2, y1]])curve = bezier.Curve(nodes,degree=2)s_vals = np.linspace(0.0, 1.0, pointn)data=curve.evaluate_multi(s_vals)x=data[0]y=data[1]segments =[]for index in range(0,len(x)):segments.append([x[index],y[index]])segments = [segments]return segments
def curved_graph(_graph, pos = None, eps=0.2, pointn=30):if pos == None:pos = nx.spring_layout(graph)for u,v in graph.edges():x0, y0 = pos[u]x1, y1 = pos[v]segs = curved_line(x0,y0,x1,y1)lc = LineCollection(segs)plt.gca().add_collection(lc)plt.gca().autoscale_view()if __name__ == '__main__':#画节点pos = nx.spring_layout(graph)nx.draw_networkx_nodes(G,pos, with_label=True)nx.draw_networkx_edges(G,pos)plt.show()#画曲线nx.draw_networkx_nodes(G,pos, with_label=True)curved_graph(graph,pos)plt.show()
直线连边版:
贝塞尔曲线连边版:
networkx画弯曲的边相关推荐
- networkx画中文节点 networkx画中文节点
在这之前,也曾经想过用networkx画中文节点图,但是上网搜了下,感觉挺麻烦的,就一直没画.这次导师要我画一个中文图,尝试了gephi画,可是发现用"文件"菜单下的"打 ...
- Ubuntu系统python3.6版本,networkx画关系图显示中文处理
先参考这篇文章: Ubuntu系统python3.6版本,networkx画关系图显示中文处理_u013617229的博客-CSDN博客 Ubuntu系统python3.6版本,networkx画关系 ...
- drawio 画弯曲的线框 漫画风
drawio 画弯曲的线框 漫画风 效果预告 操作 效果预告 最近看到一种很温柔 drawio 风格,弯曲的曲线勾勒出各种形状,像雨天透过玻璃窗看到的湿哒哒的弯曲世界.如图. 操作 于是捣鼓了一波,也 ...
- networkx 画有权图_利用NetworkX画网络图
现在各种商业和开源的网络可视化的工具非常多,NetworkX - NetworkX是一个非常重要的网络分析工具.当然它侧重于对网络结构的分析,也包含了网络可视化部分.我最近由于要画一些张量网络图,所以 ...
- networkx画有向图和无向图
代码和结果如下所示: from matplotlib.font_manager import FontProperties import matplotlib.pyplot as plt import ...
- python的 networkx画网络结构图,节点大小能够随权重变化
6-7和 7-6选取最大的作为权重 运行效果 首先的你得有csv文件: 长这样: 第一列对应起始,第二列对应终止,第三列对应权重 代码 # -*- coding:utf-8 -*-import net ...
- visio 画 弯曲 箭头 ( 波浪线 曲线)
转自:http://blog.csdn.net/hfyinsdu/article/details/6619012 作者:hfyinsdu 示意图如下: 步骤 1. Visio 工具栏有个"连 ...
- matlab画弯曲圆柱体,matlab – 将平面弯曲成闭合的表面/圆柱体
以下似乎或多或少地做了你想要的 %// Data xmin = -3; xmax = 3; %// this piece will get folded into a cylinder Rc = 5; ...
- python networkx 导入CSV文件画关系网络图
文章目录 准备 一.无向图 二.有向图 参考链接 准备 Anaconda3中的Spyder 提前安装networkx. matplotlib 提示:以下是本篇文章正文内容,下面案例可供参考 一.无向图 ...
最新文章
- 分布式账本(Distributed ledger)
- 怎样解决VMware虚拟机无法连接外网问题
- jquery获取服务器控件的值
- 007-流程控制 if 语句
- java cha r转string_JAVA String.format 方法使用介绍
- Python的系统管理_08_python_异常处理
- 实习踩坑之路:快速失败:使用stream流便利集合的时候删除了对象,导致抛错Null
- 微信内下载APK 微信浏览器apk下载的解决方案
- c++游戏编程100事列_游戏编程入门(c++小游戏编程100例)
- 无线AP 传输、认证
- Web安全-浅析网页暗链与挂马攻击
- Rhino6.5软件安装包详细安装教程
- python实现排列组合公式C(m,n)求值
- MySQL中更新时间字段的更新时点问题
- JAVA:二进制与十进制转换
- 有个程序猿很忧桑:一个命令rm -rf/ ,他把整个公司删没了...
- 把图片隐藏进音频详细教程(含软件下载及使用方法)
- goim 架构与定制
- docker pytorch-cuda 安装 devel 版本
- C语言小程序:如何用代码“画”出一个爱心