Python-Matplotlib可视化(5)——添加自定义形状绘制复杂图形
Python-Matplotlib可视化(5)——添加自定义形状绘制复杂图形
- 前言
- 添加辅助网格
- 添加辅助线
- 添加形状
- 自定义形状
- 使用多边形
- 使用路径属性
- 系列链接
前言
在系列博文的中,我们已经学习了如何自定义绘图的颜色和样式,以使得绘制更加精美、符合审美要求。可以用Matplotlib绘制出复杂而又精美的统计图,同时也讲解了注释的用法,但是这远远不够,很多时候我们还需要绘制复杂形状,以使统计图变得更加复杂,看起来更加高级,考虑到这一需求,Matplotlib提供了大量自定义形状的函数,利用可以在统计图中添加各种复杂形状,以使得所绘制的统计图更加具有高级感。
添加辅助网格
当我们查看图形时,可能需要快速估计出图形中某一部分的坐标,这时,向图形中添加辅助网格将是一种提高图形可读性的良好方法。
import numpy as np
import matplotlib.pyplot as plt
data = np.random.standard_normal((150, 2))
plt.scatter(data[:,0],data[:,1],c='y')
plt.grid(True, lw=.5, ls='--', c='c')
plt.show()
Tips:添加辅助网格只需调用以True为参数的plt.grid()函数,网格由线条组成,因此plt.grid()可以接受线条样式参数(如linewidth、linestyle以及color等)来修改辅助网络中的线条。
添加辅助线
由于Matplotlib生成的所有图形都由基本原语组成,因此我们可以使用一个基本的原语:lines来添加辅助线。
import matplotlib.pyplot as plt
N = 16
for i in range(N):plt.gca().add_line(plt.Line2D((0, i), (N - i, 0), color = 'm'))
plt.axis('tight')
plt.show()
plt.Line2D()函数的作用是:创建一个新的Line2D对象,必要参数是线段的两个端点,可选参数包括所有介绍过的线条样式参数(如linewidth、linestyle以及color等),创建线段完成后,并不会显示该直线,若需要显示此对象需要使用plt.gca()。plt.gca()函数的作用是返回负责跟踪渲染内容的对象。调用plt.gca().add_line()就可以渲染创建的Line2Dd对象。使用plt.axis()函数可以修改图形比例,如不添加此函数的调用将导致绘制图形不能完整显示。
添加形状
我们已经学习了使用lines原语制作线条,但是在实际中,我们可能需要更多的形状,使用其他形状的方式与lines原语的相同。
import matplotlib.patches as patches
import matplotlib.pyplot as plt
# 圆形
shape = patches.Circle((0, 0), radius = 1., color = 'm')
plt.gca().add_patch(shape)
# 四边形
shape = patches.Rectangle((2.5, -.5), 2., 1., color = 'c')
plt.gca().add_patch(shape)
# 椭圆形
shape = patches.Ellipse((0, -2.), 2., 1., angle = 45., color = 'y')
plt.gca().add_patch(shape)
# 花状框
shape = patches.FancyBboxPatch((2.5, -2.5), 2., 1., boxstyle = 'sawtooth', color = 'b')
plt.gca().add_patch(shape)
# 显示
plt.grid(True, alpha=0.3)
plt.axis('scaled')
plt.show()
Tips:与使用lines原语一样,使用Matplotlib其它形状原语进行操作时,必须使用pyplot.axis()函数修改图形比例,否则将导致绘制图形不能完整显示。
无论显示哪种形状,其原理都是一样的。在Matplotlib中,形状被描述为名为patch的路径。matplotlib.patches模块中提供了几种形状的路径。与线端一样,仅创建路径并不会在屏幕上渲染它,必须明确使用渲染函数plt.gca()
。
matplotlib.patches模块包含很多路径构造类,常用的主要包括:
路径构造类名 | 描述 |
---|---|
Circle | 需要圆心坐标和半径作为参数 |
Rectangle | 需要四边形左下角的坐标和边长作为参数 |
Ellipse | 需要椭圆中心坐标和两轴半长作为参数 |
FancyBox | 这类似于花形框,需要可选参数boxstyle指定样式,可选值包括:“larrow”、“rarrow”、“round”、“round4”、“roundtooth”、"sawtooth"以及"square"等) |
自定义形状
除了预定义的形状外,我们还可以使用多边形定义任意形状。
使用多边形
多边形的使用方法与上一部分中路径的使用方法类似:
import numpy as np
import matplotlib.patches as patches
import matplotlib.pyplot as plt
theta = np.linspace(0, 2 * np.pi, 8)
points = np.vstack((np.cos(theta), np.sin(theta))).transpose()
plt.gca().add_patch(patches.Polygon(points, color = 'm'))
plt.grid(True)
plt.axis('scaled')
plt.show()
Tips:matplotlib.patches.Polygon()构造函数接受多边形顶点的坐标列表作为输入参数值。
使用路径属性
所有的路径都可以使用线条及填充的属性:包括linewidth、linestyle、edgecolor、facecolor、hatch等:
import numpy as np
import matplotlib.patches as patches
import matplotlib.pyplot as plt
theta = np.linspace(0, 2 * np.pi, 8)
points = np.vstack((np.cos(theta), np.sin(theta))).transpose()
plt.gca().add_patch(plt.Circle((0, 0), radius = 1., color = 'm'))
plt.gca().add_patch(plt.Polygon(points, closed=None, fill=None, lw = 3., ls = 'dashed', edgecolor = 'c'))
plt.grid(True)
plt.axis('scaled')
plt.show()
Tips:上述示例中,使用带有虚线边(ls = 'dashed')的非填充(fill=None)多边形来绘制多边形轮廓,使用此方法,就不必创建多个Line对象来绘制此多边形。
系列链接
Python-Matplotlib可视化(1)——一文详解常见统计图的绘制
Python-Matplotlib可视化(2)——自定义颜色绘制精美统计图
Python-Matplotlib可视化(3)——自定义样式绘制精美统计图
Python-Matplotlib可视化(4)——添加注释让统计图通俗易懂
Python-Matplotlib可视化(6)——自定义坐标轴让统计图清晰易懂
Python-Matplotlib可视化(7)——多方面自定义统计图绘制
Python-Matplotlib可视化(8)——图形的输出与保存
Python-Matplotlib可视化(9)——精通更多实用图形的绘制
Python-Matplotlib可视化(10)——一文详解3D统计图的绘制
Python-Matplotlib可视化(5)——添加自定义形状绘制复杂图形相关推荐
- Python数据可视化(三)绘制统计图形大全
3.1 柱状图 以 Python 代码的形式讲解柱状图的绘制原理,这里重点讲解 bar()函数的使用方法. 代码: import matplotlib as mpl import matplotlib ...
- Python matplotlib可视化:在Matplotlib中为坐标轴刻度添加自定义符号(例如,货币符号¥$等)、水平条形图(horizontal bar)
Python matplotlib可视化:在Matplotlib中为坐标轴刻度添加自定义符号(例如,货币符号¥$等).水平条形图(horizontal bar) 目录
- Python matplotlib可视化:自定义轴标签格式化函数(在轴刻度上添加自定义的数值以及符号形式)、使用自定义函数在Matplotlib中为坐标轴刻度添加自定义符号(例如,货币符号¥$等)
Python matplotlib可视化:自定义轴标签格式化函数(在轴刻度上添加自定义的数值以及符号形式).使用自定义函数在Matplotlib中为坐标轴刻度添加自定义符号(例如,货币符号¥$等) 目 ...
- python数据可视化读取excell文件绘制图像详细教程
python数据可视化读取excell文件绘制图像详细教程 python数据可视化 python库中的基本用法 import pandas as pd # 调用pandas库 来读取excell的文件 ...
- Python+matplotlib可视化自定义轴域大小和位置
推荐图书: <Python可以这样学>,ISBN:9787302456469,董付国,清华大学出版社,第9次印刷 图书详情(京东): 董付国老师17本Python系列图书均提供配套教学资源 ...
- Python matplotlib可视化:用Matplotlib的bar_label函数为条形图添加数值标记(在每一个条形的外侧顶部)
Python matplotlib可视化:用Matplotlib的bar_label函数为条形图添加数值标记(在每一个条形的外侧顶部) 目录
- Python matplotlib可视化:用Matplotlib的bar_label函数自定义条形图的数值标签、用Matplotlib的bar_label函数为条形图添加数值标记(在每一个条形的中部)
Python matplotlib可视化:用Matplotlib的bar_label函数自定义条形图的数值标签.用Matplotlib的bar_label函数为条形图添加数值标记(在每一个条形的中部) ...
- qmlcanvas绘制3d图形_透视Matplotlib核心功能和工具包 - 绘制3D图形
关联知识 Matplotlib Python 线图 在此,我们将学习如何创建3D线图. 它类似于2D等效折线图,并且2D折线图的许多属性都结转到3D. 我们将在相同的轴上绘制凹凸曲线,并从不同角度查看 ...
- 用python绘制柱状图标题-Python数据可视化:5种绘制柱状图表的方法(附源码)...
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于数据Magic,作者我不是小样 前言 python里面有很多优秀的可 ...
最新文章
- git merge 冲突_更新了!深入浅出图解Git,入门到精通(保姆级教程)第三篇
- goland http proxy 代理设置
- B树、B+树其实很简单,看不懂你找我
- Microsoft Office Visio
- android activity使用,android,NativeActivity使用
- 如何用c 控制mysql数据库_用C语言操作MySQL数据库
- mysql命令实践_MySQL:常用命令行
- 生死狙击服务器名字怎么修改,生死狙击端游怎么改名字,生死狙击端游怎么改名字?...
- django允许跨域请求配置
- 初中级前端开发工程师如何提升个人能力?
- 物联网小课堂之NB-IoT无线通信中的发射功率和接收灵敏度
- java 方法缺省参数
- 金字塔结构式表达利器
- 让我帮你百度一下吧--精简版Github源码
- 一个浪漫又悲情的爱情故事——笛卡尔心形线
- 出现Head https://registry-1.docker.io/v2/library/node/manifests/14-alpine的解决方法
- 文因互联 CEO 鲍捷:确保搞砸人工智能项目的十种方法
- 服务器系统共享文件,服务器操作系统文件共享设置
- c语言扩散,可扩散列--可扩散列头文件C语言
- FAST 2020 摘要概览
热门文章
- 2017-2018-1 20155213 20155303 实验二 固件程序设计
- nginx添加nginx_mod_h264_streaming-2.2.7模块编译报错
- Clean Code 笔记
- html5各种页面切换效果和模态对话框
- [转载] Python 学习 - Numpy
- Angular07 利用angular打造管理系统页面
- Python静态方法 类方法
- 20145206《Java程序设计》实验五Java网络编程及安全
- 为什么模板函数的声明和实现都放在.h文件中
- C++ primer: C++标准库中vector类模板