1. Pyplot绘图结构
    Aritists
    matplotlib API包含有三层:

backend_bases.FigureCanvas : 图表的绘制领域
backend_bases.Renderer : 知道如何在FigureCanvas上如何绘图
artist.Artist : 知道如何使用Renderer在FigureCanvas上绘图
FigureCanvas和Renderer需要处理底层的绘图操作,例如使用wxPython在界面上绘图,或者使用PostScript绘制PDF。Artist则处理所有的高层结构,例如处理图表、文字和曲线等的绘制和布局。通常我们只和Artist打交道,而不需要关心底层的绘制细节。

Artists分为简单类型和容器类型两种。简单类型的Artists为标准的绘图元件,例如Line2D、 Rectangle、 Text、AxesImage 等等。而容器类型则可以包含许多简单类型的Artists,使它们组织成一个整体,例如Axis、 Axes、Figure等。

Figure
Figure代表一个绘制面板,其中可以包涵多个Axes(即多个图表)。

fig = plt.figure()  # an empty figure with no axes
ax = fig.add_axes([0.15, 0.1, 0.7, 0.3])#或者采用一下方式
fig, ax_lst = plt.subplots(2, 2)  # a figure with a 2x2 grid of Axes

Axes
Axes表示一个图表
一个Axes包涵:titlek, xaxis, yaxis

Axis
坐标轴

  1. Artist的属性
    下面是Artist对象都具有的一些属性:
    alpha : 透明度,值在0到1之间,0为完全透明,1为完全不透明
    animated : 布尔值,在绘制动画效果时使用
    axes : 此Artist对象所在的Axes对象,可能为None
    clip_box : 对象的裁剪框
    clip_on : 是否裁剪
    clip_path : 裁剪的路径
    contains : 判断指定点是否在对象上的函数
    figure : 所在的Figure对象,可能为None
    label : 文本标签
    picker : 控制Artist对象选取
    transform : 控制偏移旋转
    visible : 是否可见
    zorder : 控制绘图顺序

Artist对象的所有属性都通过相应的 get_* 和 set_* 函数进行读写

fig.set_alpha(0.5*fig.get_alpha())

如果你想用一条语句设置多个属性的话,可以使用set函数:

fig.set(alpha=0.5, zorder=2)

使用 matplotlib.pyplot.getp 函数可以方便地输出Artist对象的所有属性名和值。

>>> plt.getp(fig.patch)aa = Truealpha = 1.0animated = Falseantialiased or aa = True
  1. Figure
    如前所述,Figure是最大的一个Aritist,它包括整幅图像的所有元素,背景是一个Rectangle对象,用Figure.patch属性表示。
    通过调用add_subplot或者add_axes方法往图表中添加Axes(子图)。
    PS:这两个方法返回值类型不同
>>> fig = plt.figure()
>>> ax1 = fig.add_subplot(211)
>>> ax2 = fig.add_axes([0.1, 0.1, 0.7, 0.3])
>>> ax1
<matplotlib.axes.AxesSubplot object at 0x056BCA90>
>>> ax2
<matplotlib.axes.Axes object at 0x056BC910>
>>> fig.axes
[<matplotlib.axes.AxesSubplot object at 0x056BCA90>,
<matplotlib.axes.Axes object at 0x056BC910>]

为了支持pylab中的gca()等函数,Figure对象内部保存有当前轴的信息,因此不建议直接对Figure.axes属性进行列表操作,而应该使用add_subplot, add_axes, delaxes等方法进行添加和删除操作。

fig = plt.figure()
ax1 = fig.add_axes([0.1, 0.45, 0.8, 0.5])
ax2 = fig.add_axes([0.1, 0.1, 0.8, 0.2])
plt.show()


Figure对象可以拥有自己的文字、线条以及图像等简单类型的Artist。缺省的坐标系统为像素点,但是可以通过设置Artist对象的transform属性修改坐标系的转换方式。最常用的Figure对象的坐标系是以左下角为坐标原点(0,0),右上角为坐标(1,1)。下面的程序创建并添加两条直线到fig中:

>>> from matplotlib.lines import Line2D
>>> fig = plt.figure()
>>> line1 = Line2D([0,1],[0,1], transform=fig.transFigure, figure=fig, color="r")
>>> line2 = Line2D([0,1],[1,0], transform=fig.transFigure, figure=fig, color="g")
>>> fig.lines.extend([line1, line2])
>>> fig.show()


在Figure对象中手工绘制直线

注意为了让所创建的Line2D对象使用fig的坐标,我们将fig.TransFigure赋给Line2D对象的transform属性;为了让Line2D对象知道它是在fig对象中,我们还设置其figure属性为fig;最后还需要将创建的两个Line2D对象添加到fig.lines属性中去。

Figure对象有如下属性包含其它的Artist对象:

axes : Axes对象列表
patch : 作为背景的Rectangle对象
images : FigureImage对象列表,用来显示图片
legends : Legend对象列表
lines : Line2D对象列表
patches : patch对象列表
texts : Text对象列表,用来显示文字
  1. Axes
    Axes容器是整个matplotlib库的核心,它包含了组成图表的众多Artist对象,并且有许多方法函数帮助我们创建、修改这些对象。和Figure一样,它有一个patch属性作为背景,
    当它是笛卡尔坐标时,patch属性是一个Rectangle对象;
    当它是极坐标时,patch属性则是Circle对象。

当你调用Axes的绘图方法(例如plot),它将创建一组Line2D对象,并将所有的关键字参数传递给这些Line2D对象,并将它们添加进Axes.lines属性中,最后返回所创建的Line2D对象列表:

x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 3.0)y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)ax1.patch.set_facecolor("green")
ax1.grid(True)
line1 = ax1.plot(x1, y1, 'yo-', label="Test1")
print type(line1)
print line1line2 = ax2.plot(x2, y2, 'r.-', label='Test2')-----
<type 'list'>
[<matplotlib.lines.Line2D object at 0x7fa3ac96e8d0>]

注意:
plot返回的是一个Line2D对象的列表,因为我们可以传递多组X,Y轴的数据,一次绘制多条曲线。

与plot方法类似,绘制直方图的方法bar和绘制柱状统计图的方法hist将创建一个Patch对象的列表,每个元素实际上都是Patch的子类Rectangle,并且将所创建的Patch对象都添加进Axes.patches属性中:

>>> ax = fig.add_subplot(111)
>>> n, bins, rects = ax.hist(np.random.randn(1000), 50, facecolor="blue")
>>> rects
<a list of 50 Patch objects>
>>> rects[0]
<matplotlib.patches.Rectangle object at 0x05BC2350>
>>> ax.patches[0]
<matplotlib.patches.Rectangle object at 0x05BC2350>

一般我们不会直接对Axes.lines或者Axes.patches属性进行操作,而是调用add_line或者add_patch等方法,这些方法帮助我们完成许多属性设置工作:

   >>> fig = plt.figure()>>> ax = fig.add_subplot(111)>>> rect = matplotlib.patches.Rectangle((1,1), width=5, height=12)>>> print rect.get_axes() # rect的axes属性为空None>>> rect.get_transform() # rect的transform属性为缺省值BboxTransformTo(Bbox(array([[  1.,   1.],[  6.,  13.]])))>>> ax.add_patch(rect) # 将rect添加进ax<matplotlib.patches.Rectangle object at 0x05C34E50>>>> rect.get_axes() # 于是rect的axes属性就是ax<matplotlib.axes.AxesSubplot object at 0x05C09CB0>>>> # rect的transform属性和ax的transData相同>>> rect.get_transform()... # 太长,省略>>> ax.transData... # 太长,省略>>> ax.get_xlim() # ax的X轴范围为0到1,无法显示完整的rect(0.0, 1.0)>>> ax.dataLim._get_bounds() # 数据的范围和rect的大小一致(1.0, 1.0, 5.0, 12.0)>>> ax.autoscale_view() # 自动调整坐标轴范围>>> ax.get_xlim() # 于是X轴可以完整显示rect(1.0, 6.0)>>> plt.show()

通过上面的例子我们可以看出,add_patch方法帮助我们设置了rect的axes和transform属性。

下面详细列出Axes包含各种Artist对象的属性:

artists : Artist对象列表
patch : 作为Axes背景的Patch对象,可以是Rectangle或者Circle
collections : Collection对象列表
images : AxesImage对象列表
legends : Legend对象列表
lines : Line2D对象列表
patches : Patch对象列表
texts : Text对象列表
xaxis : XAxis对象
yaxis : YAxis对象

下面列出Axes的创建Artist对象的方法:

6. Axis
Axis容器包括坐标轴上的刻度线、刻度文本、坐标网格以及坐标轴标题等内容。刻度包括主刻度和副刻度,分别通过Axis.get_major_ticks和Axis.get_minor_ticks方法获得。每个刻度线都是一个XTick或者YTick对象,它包括实际的刻度线和刻度文本。为了方便访问刻度线和文本,Axis对象提供了get_ticklabels和get_ticklines方法分别直接获得刻度线和刻度文本

>>> axis.get_ticklocs() # 获得刻度的位置列表
array([ 1. ,  1.5,  2. ,  2.5,  3. ])>>> axis.get_ticklabels() # 获得刻度标签列表
<a list of 5 Text major ticklabel objects>
>>> [x.get_text() for x in axis.get_ticklabels()] # 获得刻度的文本字符串
[u'1.0', u'1.5', u'2.0', u'2.5', u'3.0']>>> axis.get_ticklines() # 获得主刻度线列表,图的上下刻度线共10条
<a list of 10 Line2D ticklines objects>>>> axis.get_ticklines(minor=True) # 获得副刻度线列表
<a list of 0 Line2D ticklines objects>

Python matplotlib高级绘图详解相关推荐

  1. Python Matplotlib 3D绘图详解(汇总)

    Python Matplotlib 3D绘图详解(汇总) 最初开发的 Matplotlib,仅支持绘制 2d 图形,后来随着版本的不断更新, Matplotlib 在二维绘图的基础上,构建了一部分较为 ...

  2. python turtle循环图案-Python内置模块turtle绘图详解

    urtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的 ...

  3. Python Turtle 海龟绘图详解官方文档中文版

    Python Turtle 海龟绘图详解 (官方文档中文版)-安徽省太湖中学陈晓中整理 概述 海龟绘图很适合用来引导孩子学习编程. 最初来自于 Wally Feurzeig, Seymour Pape ...

  4. matplotlib可视化绘图详解

    目录 1.Matplotlib 简介 Matplotlib 简介 如何使用Matplotlib Matplotlib绘制图形 2.Matplotlib图形绘制 1)折线图 2)柱状图 3)条形图 3) ...

  5. python turtle 海龟绘图详解(官方文档中文版)

    源码: Lib/turtle.py 概述 海龟绘图很适合用来引导孩子学习编程. 最初来自于 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 于 196 ...

  6. 【Python】基金/股票 最大回撤率计算与绘图详解(附源码和数据)

    如果你想找的是求最大回撤的算法,请跳转:[Python] 使用动态规划求解最大回撤详解 [Python]基金/股票 最大回撤率计算与绘图详解(附源码和数据) 0. 起因 1. 大成沪深300指数A 5 ...

  7. Python中的高级数据结构详解

    这篇文章主要介绍了Python中的高级数据结构详解,本文讲解了Collection.Array.Heapq.Bisect.Weakref.Copy以及Pprint这些数据结构的用法,需要的朋友可以参考 ...

  8. Python中第三方库Requests库的高级用法详解

    Python中第三方库Requests库的高级用法详解 虽然Python的标准库中urllib2模块已经包含了平常我们使用的大多数功能,但是它的API使用起来让人实在感觉不好.它已经不适合现在的时代, ...

  9. python:基础知识详解

    一.基本元素 变量 变量赋值: a="hello world" 变量命名: • 字母:a-z, A-Z, 其他语言的字母符号 • 数字:0-9 (不可以出现在首字符) • 下划线: ...

最新文章

  1. java成绩管理系统论文总结,JAVA论文成绩管理系统课程设计
  2. python库(2)—— threading
  3. oracle jdk_两个Oracle JDK的故事
  4. 光端机常见故障问题及其解决方案
  5. 【Python】AttributeError: ‘DatetimeProperties’ object has no attribute ‘weekday_name’ 的解决方法
  6. FastDFS 学习笔记
  7. 菜鸟的学习之路(11) — 堆栈与队列
  8. MySQL给查询结果添加一表表示行号或名次(1)
  9. spring的自动装配(default-autowire=byName)
  10. FFA 2021 专场解读 - 生产实践 / 机器学习
  11. wps linux数据库,金山 WPS for Linux
  12. excel 个人日常记账——统计报表
  13. 常用 MQTT 客户端库简介
  14. 得力计算机dl1526第15个音乐,得力dl1526乐谱 | 手游网游页游攻略大全
  15. Android 高德地图自定义InfoWindow
  16. Swift语言实战晋级-第9章 游戏实战-跑酷熊猫-1
  17. fantastic website
  18. 这四款Windows上的高质量软件,装机必备,使用起来极度舒适
  19. 苹果服务器国内维护,苹果中国iCloud服务器数据开始转移,这些问题你要注意!...
  20. antdv 表格标题换行

热门文章

  1. VarGFaceNet
  2. pytorch dropout用法
  3. std string与线程安全_详解linux系统中断线程的那些事
  4. 3没有样式重置_系统重置新增选项,99%的人不知道怎么选
  5. java四子棋实验报告_Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
  6. 需要氪金吗_《天堂2:血盟》到底需不需要氪金?玩家:可以但是没有必要
  7. jq发送动态变量_山东体育学院康复生物力学团队发文,探索手机行为双任务对动态稳定性控制的影响...
  8. 解决maven创建web项目过慢的问题
  9. python数据库编程 代码 源码_Python可以这样学_Python教程
  10. Java IO流思维导图