Matplotlib系列目录


文章目录

  • 一、 简介
  • 二、 思维导图
  • 三、 坐标轴变换及注释
    • 1. 坐标轴变换
      • 1.1 极坐标系
      • 1.2 对数坐标系
      • 1.3 地图坐标系
      • 1.4 坐标轴双坐标
    • 2. 注释
      • 2.1 引线标注
      • 2.2 文本
      • 2.3 箭头
      • 2.4 表格
      • 2.5 公式

一、 简介

‎matplotlib有强大的变换功能,并提供了预定义的极坐标、对数坐标等坐标系。
‎matplotlib还有丰富的文本和箭头注释功能,可以方便的在指定位置添加注释,并且注释文本支持latex公式。

Matplotlib系列将Matplotlib的知识和重点API,编制成思维导图和重点笔记形式,方便记忆和回顾,也方便应用时参考,初学者也可以参考逐步深入学习。

二、 思维导图

三、 坐标轴变换及注释

1. 坐标轴变换

matplotlib有强大的变换功能,但是通常我们不需要直接去写代码变换,常用的极坐标、对数坐标等有预设的方法。

1.1 极坐标系

极坐标绘图需要在创建子图的时候设置参数projection="polar"

示例如下:

import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()ax=fig.add_subplot(111, projection="polar")
theta=np.linspace(0, np.pi*2, 50)
ax.plot(theta, theta/2)plt.show()

注意fig.subplots函数不支持projection参数。

极坐标显示设置

  • 极轴坐标最大、最小值设置

    • ax.set_rlim(0.5,1):经向坐标范围为0.5至1。相当于同时使用set_rmax,set_rmin
    • ax.set_rmax(1):设置经向最大坐标值为1
    • ax.set_rmin(0.5):设置经向最小坐标值为0.5
  • 极轴坐标网格显示设置
    • ax.set_rgrids(np.arange(0, 1, 0.2)):设置经向网格
    • ax.set_rticks(np.arange(0,0.8,0.2)):设置经向网格范围,与set_rgird完全相同
  • 极轴坐标设置为对数坐标
    • ax.set_rscale('symlog'):设置为对数坐标。set_rscale(‘linear’)设置为线型坐标
  • 极轴坐标刻度标签位置设置
    • ax.set_rlabel_position('90'):经向文本标签在90度反向位置显示

1.2 对数坐标系

x轴为对数坐标

  • ax.semilogx(x,y)
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure()
ax1=fig.subplots()x=np.array([1,10,100,1000,10000])
y=(np.log10(x)-2)**2
ax1.semilogx(x,y)ax1.grid(True)
fig.tight_layout()
plt.show()

y轴为对数坐标

  • ax.semilogy(x,y)
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure()
ax1=fig.subplots()y=np.array([1,10,100,1000,10000])
x=(np.log10(x)-2)**2
ax1.semilogy(x,y)ax1.grid(True)
fig.tight_layout()
plt.show()

x,y轴同为对数坐标

import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure()
ax1=fig.subplots()y=np.array([1,10,100,1000,10000])
x=y
ax1.loglog(x,y)ax1.grid(True)
plt.show()

1.3 地图坐标系

matplotlib提供了世界地图投影坐标系。共四种:

  • ‘aitoff’:埃托夫投影。用椭圆(轴比2:1)显示世界地图。

    • 是一种方位等距投影。采用椭圆形经纬网的折衷投影。
    • 适用于绘制小比例的世界地图。
    • 经度范围是从-pi到pi,纬度范围是从-pi/2到pi/2。
  • ‘hammer’:汉莫尔投影。用椭圆(轴比2:1)显示世界地图。也称为“aitoff-hammer”投影。
    • 是兰伯特等面积投影的改良型投影。是等面积投影,其经纬网都是椭圆形。
    • 适用于绘制小比例地图。
  • ‘mollweide’:摩尔维特投影。用椭圆(轴比2:1)显示世界地图。
    • 是一种等面积伪圆柱投影。形状、方向、角度和距离一般都会发生畸变。
    • 适用于需要精确面积的专题世界地图。
    • 经度范围是从-pi到pi,纬度范围是从-pi/2到pi/2。
  • ‘lambert’:圆形地图投影
    • 经度范围是从(-pi,pi),纬度范围是从-pi到pi。

地图投影区别详见ArcGIS地图投影

import numpy as np
import matplotlib.pyplot as pltfig=plt.figure()
ax1=fig.add_subplot(221, projection='aitoff')
ax2=fig.add_subplot(222, projection='hammer')
ax3=fig.add_subplot(223, projection='mollweide')
ax4=fig.add_subplot(224, projection='lambert')x=np.linspace(-np.pi,np.pi,200)  #经度-π~π(-180~180)
y=np.sin(x)                                #纬度-π/2~π/2(-90~90)ax1.plot(x,y)
ax2.plot(x,y)
ax3.plot(x,y)
ax4.plot(x,y)ax1.grid(True)
ax2.grid(True)
ax3.grid(True)
ax4.grid(True)fig.tight_layout()
plt.show()

1.4 坐标轴双坐标

matplotlib支持为x轴,y轴设置第二个坐标刻度。

  • ax.secondary_xaxis('top', functions=(f1,f2)):为x轴设置第二坐标刻度
  • ax.secondary_xaxis('right',functions=(f1,f2)):为y轴设置第二坐标刻度
    • 第一个参数为显示位置,必须设置。
    • 第二个参数为变换函数。f1为当前坐标变换到第二坐标的函数。f2为f1的反向

示例如下:

import numpy as np
import matplotlib.pyplot as pltfig=plt.figure()
ax=fig.subplots()x=np.linspace(-np.pi,np.pi,200)
y=np.sin(x)
ax.plot(x,y)
ax.set_xlabel('x')xaxis2=ax.secondary_xaxis('top', functions=(np.rad2deg,np.deg2rad)) #设置x轴第二坐标
xaxis2.set_xlabel('angle[rad]')plt.show()

2. 注释

2.1 引线标注

  • ax.annotate(text,xy,xytext,arrowprops={}):为xy坐标处设置标注,文字位于xytext坐标。

    • xytext参数不存在时,默认文本位于xy坐标
    • arrowprops参数:设置箭头绘制参数,arrowprops是字典。
      • 箭头指向xy坐标,箭头尾部位于xytext坐标。
      • 默认值是None,即不显示箭头。赋值为空字典{},就可以显示默认样式的箭头。

引线箭头参数设置

annotate引线箭头参数有两种设置方式:

1)简单方式

  • arrowprops={}):使用默认值绘制箭头
  • arrowprops={"width":3}):设置箭头线条宽度,默认宽度为3
  • arrowprops={"headwidth":12,"headlength":15}):设置箭头三角形长宽,默认都是12
  • arrowprops={"shrink":0.1}):箭头线条长度缩短0.1
  • arrowprops={"color":'gray'}):箭头线条长度缩短0.1

arrowprops参数中字典内的key可以任意组合。

ax1.annotate("max point", (np.pi/2,1), xytext=(2,1.2), #arrowprops={})  #使用默认值绘制箭头#arrowprops={"width":3})  #设置箭头线条宽度,默认宽度为3#arrowprops={"headwidth":12,"headlength":15})  #设置箭头三角形长宽,默认都是12#arrowprops={"shrink":0.1})  #箭头线条长度缩短0.1arrowprops={"width":1, "headwidth":6,"headlength":10,"color":"gray"})

2)高级方式

高级方式arrowprops字典的key可选选项的更多,可以组合出更加华丽的样式。常用的key如下:

  1. 箭头样式
  • "arrowstyle":"-":样式设置,可选样式很多

    • "-":线条,只有引线
    • "<-","->","<->":单向箭头和双向箭头
    • "<|-","-|>","<|-|>":有填充颜色的箭头
    • "Simple","fancy","wedge":简单箭头,尾部变宽凹成v型箭头,长三角形
  • “<-”,"-|>"等都还可有参数head_length=0.4, head_width=0.2, widthA=1.0, widthB=1.0, lengthA=0.2, lengthB=0.2
  • "simple"和"fancy"具有参数:head_length=0.5, head_width=0.5, tail_width=0.2
  • "wedge"具有参数:tail_width=0.3, shrink_factor=0.5

用法示例:

  • arrowprops={"arrowstyle":"->, head_length=0.4,head_width=0.3"}
  • arrowprops={"arrowstyle":"fancy,tail_width=0.5"}
  1. 箭头引线样式
  • 'connectionstyle':"arc3, rad=0.0":弧形
  • 'connectionstyle':"angle3, angleA=90, angleB=0":贝塞尔曲线
  1. 其他关键字
  • ‘color’:颜色
  • ‘facecolor’ or ‘fc’:填充色
  • ‘edgecolor’ or ‘ec’:边缘色
  • ‘fill’:bool,是否填充
  • ‘aplpha’:透明度
  • ‘linestyle’ or ‘ls’:线型
  • ‘linewidth’ or ‘lw’:线宽

示例:

import numpy as np
import matplotlib.pyplot as pltfig=plt.figure()
ax1=fig.subplots()
x=np.linspace(-np.pi,np.pi,200)
y=np.sin(x)
ax1.plot(x,y)ax1.annotate("max point",  (np.pi/2,1), xytext=(1.5,0.5), arrowprops={"arrowstyle":"fancy, tail_width=0.5",'connectionstyle':'arc3, rad=-0.2','fill':True, 'ec':'gray','fc':'lightblue', 'alpha':0.5})ax1.grid(True)
plt.show()

2.2 文本

  • ax.text(x,y,s):把文本s绘制到坐标x,y处。

    • 字体设置参数

      • fontfamily=['simhei','serif']:字体参数
      • fontsize=14:字号参数
      • fontstyle='italic':是否斜体
      • fontweight=500:取值0-1000或者"light",“normal”,"bold"等
    • rotation=30:旋转角度
    • bbox={'facecolor':'r','alpha':0.3}:设置方框及填充颜色
ax.text(1,1,"max point",rotation=30,bbox=dict(fc='green',alpha=0.3))

2.3 箭头

在指定位置绘制箭头,可用于特别的注释或者公式、流程等。

  • ax.arrow(x,y,dx,dy):绘制从x,y指向(x+dx,y+dy)的箭头

    • 箭头箭杆尺度参数

      • head_width=3*width:箭头宽度
      • head_length=1.5*head_width:箭头长度
      • width=0.001:箭杆宽度。单位和坐标轴刻度相同
    • 颜色参数
      • color='gray':设置颜色
      • facecolor='gray':or fc设置填充颜色
      • edgecolor='gray':or ec设置边缘颜色
      • alpha=0.5:透明度
    • 形状参数
      • fill=True:是否填充色块(颜色有fc决定)
      • hatch='/':图案填充(与fill无关,颜色由ec决定)
        • '/', '\', '|', '-':平行线条
        • '+', 'x':网格
        • 'o', 'O', '.', '*':点
    • 边缘线条
      • linestyle='--':箭头边缘线条样式
      • linewidth=5:箭头边缘线条跨度。单位是像素。
ax.arrow(0.3,0.3,0.2,0.2,         #箭头位置0.3,0.3到0.5,0.5width=0.1,                #箭杆宽度fill=True,fc='gray',      #填充色lw=5,ec='orangered',      #边缘线条hatch='+')                #图案填充,颜色为ec

2.4 表格

在指定位置绘制表格。

  • ax.table(np.array([['11','12'],['21','22']])):2维数组文本绘制为表格
  • ax.table(cellColours=np.array([['C1','C2'],['C3','C4']])):绘制表格,填充对应颜色。

table函数必须有文本参数或者cellColours参数。

  • ax.table函数常用参数(可选)

    • loc='bottom':默认在x轴下方

      • ‘best’: 0, ‘left’: 15, ‘right’: 14, ‘bottom’: 17, ‘top’: 16, ‘center’: 9
      • 'bottom left': 12, 'bottom right': 13:外部下方
      • 'top left': 11, 'top right': 10:外部上方
      • 'center left': 5, 'center right': 6:内部
      • 'lower center': 7, 'lower left': 3, 'lower right': 4:内部下方
      • 'upper center': 8, 'upper left': 2, 'upper right': 1:内部上方
    • cellLoc='right':单元格内文本对齐方式
      • ‘left’, ‘center’, ‘right’
    • colWidths=[1,1]:列宽度,单位和坐标轴相同。不设置的话,表格宽度和坐标轴相同
    • rowLabels=['row1','row2']:行标题
    • colLabels=['col1','col2']:列标题
    • colColours, rowColours:分别设置列标题、行标题颜色。
ax.table([['11','12'],['21','22']],cellColours=[['C1','C2'],['C3','C4']],loc="upper right",colWidths=[0.2,0.2],cellLoc="center",rowLabels=['row1','row2'],colLabels=['col1','col2'],rowColours=['C0','C0'],colColours=['C5','C5'])
ax.set_xticks([])

2.5 公式

设置rcParams["text.usetex"]=True后,可以在文本中使用latex公式。

  • 在显示文本的地方都可以使用latex,比如xlabel,title,text
  • 可以在字符串中嵌入行内公式,比如ax.set_title(r'equation $a=b^2$')
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure()
ax=fig.subplots()plt.rcParams["text.usetex"]=True
ax.set_xlabel(r"$\alpha$")
ax.set_ylabel(r"y=$\alpha^2$")eq=(r"\begin{eqnarray*}"r"a=b^2+c^2 \\"r"\Delta=\sqrt{a^2+c^2} \\"r"\end{eqnarray*}")
ax.text(0.5,0.5,eq)plt.show()

第一次使用latex可能会比较慢,并且可能会提醒安装库。


Matplotlib系列目录


个人总结,部分内容进行了简单的处理和归纳,如有谬误,希望大家指出,持续修订更新中。

修订历史版本见:https://github.com/hustlei/AI_Learning_MindMap

未经允许请勿转载。

Matplotlib系列(三):坐标轴变换及注释相关推荐

  1. 4.3Python数据处理篇之Matplotlib系列(三)---plt.plot()折线图

    目录 前言 (一)plt.plot()函数的本质 ==1.说明== ==2.源代码== ==3.展示效果== (二)plt.plot()函数缺省x时 ==1.说明== ==2.源代码== ==3.展示 ...

  2. Python 数据分析三剑客之 Matplotlib(三):图例 / LaTeX / 刻度 / 子图 / 补丁等基本图像属性

    CSDN 课程推荐:<Python 数据分析与挖掘>,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务.曾与联想.亨氏.网 ...

  3. html中地图的绘制toolbars,tkinter内嵌Matplotlib系列(二)之函数曲线绘制

    目录 前言 前一章节,我们解读了tkinter内嵌Matplotlib的教程,了解其内嵌的原理,就是在tkinter创建matplotlib的画布控件,再利用其返回的画布对象进行绘图,其他附加功能,使 ...

  4. Matplotlib系列(六):路径、面片和集合

    Matplotlib系列目录 文章目录 一. 简介 二. 思维导图 三. Matplotlib路径.块.集合 1. 路径(Path)和块(Patch) 1.1 预定义基本图形patch 1.1.1 圆 ...

  5. 深入剖析Redis系列(三) - Redis集群模式搭建与原理详解

    前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...

  6. SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型

    原文:SQL Server 2008空间数据应用系列三:SQL Server 2008空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server ...

  7. Silverlight Blend动画设计系列三:缩放动画(ScaleTransform)

    原文:Silverlight & Blend动画设计系列三:缩放动画(ScaleTransform) 在Silverlight的动画框架中,ScaleTransform类提供了在二维空间中的坐 ...

  8. 制作一幅扑克牌系列三---动起来

    制作一幅扑克牌系列三---动起来 加入了扑克牌拖动js功能,更像空当接龙小游戏了.顺便感谢一下草履虫,这段代码是从他哪儿抄来的,哈哈! <script type="text/javas ...

  9. Matplotlib系列(七):动画

    Matplotlib系列目录 文章目录 一. 简介 二. 思维导图 三. Matplotlib动画及图形修改操作 1. 手写代码更新图形实现动画 2. animation模块动画 2.1 Animat ...

  10. Git使用 从入门到入土 收藏吃灰系列(三) Git常用命令

    文章目录 一.前言 二.常用的命令 一.前言 参考安装Git 详细安装教程 参考视频B站 Git最新教程通俗易懂,这个有点长,感觉讲的精华不多 参考视频『Git』知道这些就够了_哔哩哔哩_bilibi ...

最新文章

  1. SIGPIPE导致cronttab和shell脚本等工作异常
  2. 室内主题元素分析图_主题乐园包装——“树”造型案例精选分享
  3. 首届“开悟AI+游戏高校大赛”启动
  4. 新版chrome调整开发者工具位置方式改变
  5. 淘宝的生态灾难,谁来救赎?
  6. python读取与写入配置文件
  7. 推荐一个超级方便的Android 抓包工具 Chuck
  8. Nexus3 安装 及 配置 docker 私有、代理 仓库
  9. 支持扫描的单usb口打印服务器,TL-PS110U 单USB口打印服务器
  10. model.show_result()导致jupyter lab提示服务似乎挂掉,但会立刻重启
  11. ckplayer,超酷网页播放器,用于集成在网站中的播放器
  12. 中国科学家或揭开生物第六感之谜
  13. 使用Easy Excel导入数据,性别为男女,数据库值为0、1
  14. linux 网络安全工具,常用的Linux网络安全工具简介
  15. python对淘宝运营有帮助吗_优秀的淘宝运营需要具备哪些能力
  16. 苹果手机怎么把游戏隐藏在计算机,iphone苹果手机怎么隐藏应用和游戏图标?
  17. 51nod大鱼吃小鱼问题
  18. 柔性塑料漆的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  19. opencv2矩阵操作
  20. 设计一个排课系统(Java实现)

热门文章

  1. STM32单片机定时器
  2. excel表格内容合并的操作方法
  3. 重读微积分(八):全微分和法线
  4. AngularJS【初体验】-02
  5. hdoj 3533 Escape
  6. 计算机wifi共享usb设备,手机设置wifi热点如何通过usb和电脑共享网络
  7. MPI和OpenMP实现矩阵相乘
  8. MySQL函数 if 的使用
  9. 智慧农业:各省市粮食产量排名,“鱼米之乡”湖南位居第十
  10. PTA 数据库 mysql 10-198 C1-2新增订单统计信息