1 引言

在上一节中我们介绍了使用matplotlib进行数据可视化的几种表现方法,包括折线图、散点图、饼状图以及柱状图等, 今天我们来继续学习matplotlib的高级用法,主要包括网络图,流动图以及圆弧图,那么我们开始吧。。。

2 网络图

分散式网络: 中心化网络和分布式网络的混合体,在这种类型的网络中,少量节点的攻击会降低或破坏整个网络系统的性能.
分布式网络: 分布式网络具有抵御攻击的能力,即使在攻击后部分节点无法对网络作出贡献后,该网络仍将继续运行。这与中心化网络不同,中心化网络在中心节点受到攻击时可能会立刻破坏整个网络性能。

可视化结果:

  • 分散式网络:左上分散式网络图显示。
  • 分布式网络:右上分布式网络图显示,通过三角剖分方法开发分布式网络显示。主要使用triplot()函数,绘制非结构化的三角形网格。

代码如下:

def test1():# datapn, cn = 64, 8px = np.random.normal(0, 1, pn)py = np.random.normal(0, 1, pn)cx = np.random.normal(0, 1, cn)cx = np.insert(cx, 0, 0)cy = np.random.normal(0, 1, cn)cy = np.insert(cy, 0, 0)angle = (np.arctan2(py, px) + np.pi) / (2 * np.pi)# paramdistrib = tri.Triangulation(np.concatenate([px, cx]),np.concatenate([py, cy]))cmapRede = cm.get_cmap('hsv')fig, (axA, axB) = plt.subplots(1, 2)# left: draw each pt to the nearest center ptfor s, t in zip(px, py):dist = ((s - cx) ** 2 + (t - cy) ** 2) ** 0.5csel = dist <= dist.min()for u, v in zip(cx[csel], cy[csel]):axA.plot([s, u], [t, v], color='black', alpha=0.5,linewidth=1, zorder=1)# left: draw each center to (0,0)for u, v in zip(cx, cy):if u or v:axA.plot([u, 0], [v, 0], color='black', alpha=0.25,linewidth=2, zorder=1)axA.scatter(px, py, c=cmapRede(angle), zorder=2)axA.scatter(cx, cy, color='black', s=64, zorder=2)axA.set_title('decentralized_network')# rightaxB.triplot(distrib, color='black', alpha=0.5, linewidth=1, zorder=1)axB.scatter(px, py, c=cmapRede(angle), zorder=2)axB.scatter(cx, cy, color='black', s=64, zorder=2)axB.set_title('distributed_network')plt.show()

triplot(*args, **kwargs)

参数:此方法接受以下描述的参数:

  • x, y:这些参数是要绘制的数据的x和y坐标。
  • triangulation:此参数是matplotlib.tri.Triangulation对象。
  • **kwargs:此参数是文本属性,用于控制标签的外观。

3 流动图

给定路径,使用matplotlib中的Path模块,按照对应的路径上的控制点绘制相应的三次贝塞尔曲线图.

可视化结果:

  • 上图水平流向图可视化效果

代码如下:

def test2():# dataflowcolecao = np.array(list('αβγδε'))n = len(colecao)indices = np.arange(n)sel = lambda x: np.random.choice(x, 16)mapa = np.array([sel(np.delete(indices, i)) for i in indices])rede = colecao[mapa]# paramfrom matplotlib.path import Pathimport matplotlib.patches as patchespontos = [Path.MOVETO, Path.CURVE4, Path.CURVE4, Path.CURVE4]paleta = cm.get_cmap('gist_rainbow')fig, axA = plt.subplots(1, 1)# Flow horizontalgetPy = lambda x: (1 - x / n) - 0.1for i, e in enumerate(colecao):conx, cont = np.unique(rede[i], return_counts=True)yo = getPy(i)*cor, _ = paleta(i / n)axA.text(-0.01, yo, e, ha='right', color=cor,fontsize=16, fontweight='bold')axA.text(1.01, yo, e, ha='left', color=cor,fontsize=16, fontweight='bold')for cx, ct in zip(conx, cont):yi = getPy(np.where(colecao == cx)[0])verts = [(0.0, yo), (0.5, yo), (0.5, yi), (1, yi)]path = Path(verts, pontos)patch = patches.PathPatch(path, facecolor='none', edgecolor=cor,lw=ct ** 2, alpha=1 / ct)axA.add_patch(patch)axA.set_title('Flow Horizontal')axA.axis('off')plt.show()

PathPatch(path, **kwargs)

  • path: 路径是 matplotlib.path.Path Object 。
  • facecolor: 背景颜色
  • edgecolor: 边缘颜色
  • lw: linewidth 指定线的粗细
  • alpha: 指定线的透明度

Path(vertices, codes=None)

  • vertices: 是指的是路径path所经过的关键点的一系列坐标(x,y)
  • codes指的是点与点之间到底是怎么连接的,取值如下:
    – MOVETO : 拿起钢笔, 移动到给定的顶点。一般指的是 “起始点”
    – LINETO : 从当前位置绘制直线到给定顶点。
    – CURVE3 : 从当前位置 (用给定控制点) 绘制一个二次贝塞尔曲线到给定端点。
    – CURVE4 : 从当前位置 (与给定控制点) 绘制三次贝塞尔曲线到给定端点。
    – CLOSEPOLY : 将线段绘制到当前折线的起始点。
    – STOP : 整个路径末尾的标记 (当前不需要和忽略)

4 圆弧图

给定圆弧路径,使用matplotlib中的Path模块,按照对应的路径绘制相应的圆弧路径图.

可视化结果:

  • 图弧图:左上弧图显示。
  • 径向收敛图:右上径向收敛图可视化。

代码如下:

def test3():# datan = 17indices = np.arange(n)sel = lambda x: np.random.choice(x, n // 4)mapa = np.array([sel(np.delete(indices, i)) for i in indices])rede = indices[mapa]# paramcmapArco = cm.get_cmap('rainbow')fig, (axA, axB) = plt.subplots(1, 2)# ArcgetPx = lambda x: x / (n - 1)pontos = [Path.MOVETO, Path.CURVE4, Path.CURVE4, Path.CURVE4]for i, e in enumerate(indices):conx, cont = np.unique(rede[i], return_counts=True)xo = getPx(i)*cor, _ = cmapArco(i / n)for cx, ct in zip(conx, cont):xi = getPx(np.where(indices == cx)[0])yoi = (xi - xo) * 2 ** 0.5verts = [(xo, 0), (xo, yoi), (xi, yoi), (xi, 0)]path = Path(verts, pontos)patch = patches.PathPatch(path, facecolor='none', edgecolor=cor,lw=0.5 * ct ** 3, alpha=1 / ct)axA.add_patch(patch)axA.scatter(indices / (n - 1), indices * 0, color=cmapArco(indices / n),marker='s', s=256, zorder=2)axA.set_title('Arc')axA.set_xlim([-0.05, 1.05])axA.set_ylim([-1.2, 1.2])axA.axis('off')# Convergence radialgetTheta = lambda x: 2 * np.pi * x / nfor i, e in enumerate(indices):conx, cont = np.unique(rede[i], return_counts=True)thetao = getTheta(i)xo = np.sin(thetao)yo = np.cos(thetao)*cor, _ = cmapArco(i / n)for cx, ct in zip(conx, cont):thetai = getTheta(np.where(indices == cx)[0])xi = np.sin(thetai)yi = np.cos(thetai)xm = (xo + xi) * 0.5ym = (yo + yi) * 0.5verts = [(xo, yo), ((xo + xm * 0.25) * 0.5, (yo + ym * 0.25) * 0.5),((xi + xm * 0.25) * 0.5, (yi + ym * 0.25) * 0.5), (xi, yi)]path = Path(verts, pontos)patch = patches.PathPatch(path, facecolor='none', edgecolor=cor,lw=ct ** 3, alpha=1 / ct)axB.add_patch(patch)axB.scatter(np.sin(getTheta(indices)), np.cos(getTheta(indices)),color=cmapArco(indices / n), s=512, zorder=2)axB.set_title('Convergence radial')axB.set_xlim([-1.2, 1.2])axB.set_ylim([-1.2, 1.2])axB.axis('off')plt.show()

5 终极法宝

看代码是不是一脸懵,很多童鞋估计还是不太理解贝塞尔曲线中控制点的作用…

使用matplotlib让你的数据更加生动(三)相关推荐

  1. c#split方法拆分为数据_Dexplot:基于pandas,比matplotlib更简单的数据可视化和数据分析工具...

    Dexplot:建议准备学matplotlib和seaborn的数据可视化新手或者数据可视化爱好者食用 适用于长数据 比如网站用户留言的统计 特色是不用matplotlib 而用pandas导入数据( ...

  2. python动态图形_利用matplotlib实现根据实时数据动态更新图形

    我就废话不多说了,直接上代码吧! from time import sleep from threading importThread import numpy as np import matplo ...

  3. Python: 除matplotlib外还有哪些数据可视化库?

    Python: 除matplotlib外还有哪些数据可视化库? matplotlib算是python比较底层的可视化库,可定制性强.图表资源丰富.简单易用.达到出版质量级别. 其它的可视化库诸如: s ...

  4. 使用matplotlib绘图时出现数据重复重叠问题

    使用matplotlib绘图时出现数据重复重叠问题 问题如下: 写了一个使用matplotlib绘图的函数,功能主要是绘图然后保存为图片.但在for循环中调用这个函数时会导致第二次循环时绘制的图是在第 ...

  5. 【机器学习】python使用matplotlib进行二维数据绘图并保存为png图片

    端到端机器学习导航: [机器学习]python借助pandas加载并显示csv数据文件,并绘制直方图 [机器学习]python使用matplotlib进行二维数据绘图并保存为png图片 [机器学习]p ...

  6. [数据可视化]使用matplotlib对CSV文件数据进行绘图

    [数据可视化]使用matplotlib对CSV文件数据进行绘图 使用CSV格式的锡特卡天气数据 绘制2018年1月1日的天气数据,先放成果: 代码部分包括以下内容: 分析CSV文件头 打印文件头及其位 ...

  7. 2021年大数据ELK(三):Lucene全文检索库介绍

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 一.什么是全文检索 1.结构化数据与非结构化数据 2.搜索结构化 ...

  8. 2021年大数据Kafka(三):❤️Kafka的集群搭建以及shell启动命令脚本编写❤️

    全网最详细的大数据Kafka文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 Kafka的集群搭建以及shell启动命令脚本编写 一.搭建 ...

  9. 2021年大数据HBase(三):HBase数据模型!!!【建议收藏】

    全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 Hbase数据模型 术语: 系列历史文章 2021年大 ...

最新文章

  1. 哪些人适合参加Python培训班?
  2. mysql修改时间精度_Mysql时间精度丢失问题
  3. Grafana Labs 携手阿里云,将提供国内首款 Grafana 托管服务
  4. 知识图谱实践篇(二):关系数据库到RDF
  5. C#多线程编程系列(一)- 简介
  6. 如何高效地进行敏捷开发管理
  7. hihocoder 1032 最长回文子串(Manacher)
  8. Tensorflow动态seq2seq使用总结
  9. MATLAB-S函数
  10. python守护线程_Python之守护线程与锁
  11. python3.8.0安装详细步骤_win10下python3.8的PIL库安装过程
  12. jquery楼层效果
  13. java面试基础篇--hashMap中如何解决hash冲突
  14. 三年硬件工程师薪水_硬件研发工程师,工资不高的真相
  15. 杰理之SRRC认证杂散超标【篇】
  16. Windows10家庭版 Windows defender 安全中心显示 页面不可用
  17. AutoCAD Civil 3D笔记
  18. 02 编辑素材和Tilemap
  19. java毕业设计_短视频分享网站
  20. 某985高校学者私自拷贝他人评审的基金申请书,并当自己的去申基金!国自然基金委通报!...

热门文章

  1. Kubernetes学习笔记
  2. HAWQ技术解析(三) —— 基本架构
  3. python性能测试可视化_locust安装及其简单使用----基于python的性能测试工具
  4. 完美解决jasperreports集成ssh后生成HTML图片红叉叉问题和chart不能显示问题
  5. 解决Internet HTML邮件中图片显示为红叉(X)的问题
  6. java 注解方式_小知识~~javaSE注解(超详细)
  7. js常用数组字符串方法整理
  8. 10 个解放双手超实用在线工具,有些代码真的不用手写
  9. 茶壶在触摸机制下旋转的三种方式
  10. python-机器学习(课程记录一)