Matplotlib模块--子模块及画图

Matplotlib的核心是面向对象的。如果需要对绘图进行更多的控制和自定义,建议直接使用对象。许多情况下,创建一个 Figure,一个或多个 Axes 使用pyplot.subplots。

Matplotlib子模块

  • matplotlib
  • matplotlib.afm
  • matplotlib.animation
  • matplotlib.artist
  • matplotlib.axes:是所有图标数据、图例配置等绘图形元素的容器,包含大多数图形元素: Axis , Tick , Line2D , Text , Polygon 等,并设置坐标系。
  • matplotlib.axis
  • matplotlib.backend_bases
  • matplotlib.backend_managers
  • matplotlib.backend_tools
  • matplotlib.backends
  • matplotlib.bezier
  • matplotlib.blocking_input
  • matplotlib.category
  • matplotlib.cbook
  • matplotlib.cm
  • matplotlib.collections
  • matplotlib.colorbar
  • matplotlib.colors
  • matplotlib.container
  • matplotlib.contour
  • matplotlib.dates
  • matplotlib.dviread
  • matplotlib.figure:Figure提供了容纳多个Axes的画板
  • matplotlib.font_manager
  • matplotlib.fontconfig_pattern
  • matplotlib.gridspec
  • matplotlib.image
  • matplotlib.legend
  • matplotlib.legend_handler
  • matplotlib.lines
  • matplotlib.markers
  • matplotlib.mathtext
  • matplotlib.mlab
  • matplotlib.offsetbox
  • matplotlib.patches
  • matplotlib.path
  • matplotlib.patheffects
  • matplotlib.pyplot:面向“当前”图
  • matplotlib.projections
  • matplotlib.projections.polar
  • matplotlib.quiver
  • matplotlib.rcsetup
  • matplotlib.sankey
  • matplotlib.scale
  • matplotlib.sphinxext.plot_directive
  • matplotlib.spines
  • matplotlib.style
  • matplotlib.table
  • matplotlib.testing
  • matplotlib.text
  • matplotlib.texmanager
  • matplotlib.textpath
  • matplotlib.ticker
  • matplotlib.tight_layout
  • matplotlib.transforms
  • matplotlib.tri
  • matplotlib.type1font
  • matplotlib.units
  • matplotlib.widgets

绘图

如果是简单的单图表绘制,或者是交互实验环境,则plt接口足以满足需要,且操作简单易用。
如果是多图表绘制,需要相对复杂的图例配置和其他自定义设置,那么毫无疑问面向对象接口绘图是当之无愧的不二选择。
在这里插入图片描述

创建画板

包括创建figure和axes对象。figure和axes,其中前者为所有绘图操作定义了顶层类对象Figure,相当于是提供了画板;而后者则定义了画板中的每一个绘图对象Axes,相当于画板内的各个子图。换句话说,figure是axes的父容器,而axes是figure的内部元素,而我们常用的各种图表、图例、坐标轴等则又是axes的内部元素。常用有3种方法

  • plt.figure,主要接收一个元组作为figsize参数设置图形大小,返回一个figure对象用于提供画板
  • plt.axes,接收一个figure或在当前画板上添加一个子图,返回该axes对象,并将其设置为"当前"图,缺省时会在绘图前自动添加
  • plt.subplot,主要接收3个数字或1个3位数(自动解析成3个数字,要求解析后数值合理)作为子图的行数、列数和当前子图索引,索引从1开始(与MATLAB保存一致),返回一个axes对象用于绘图操作。这里,可以理解成是先隐式执行了plt.figure,然后在创建的figure对象上添加子图,并返回当前子图实例
  • plt.subplots,主要接收一个行数nrows和列数ncols作为参数(不含第三个数字),创建一个figure对象和相应数量的axes对象,同时返回该figure对象和axes对象嵌套列表,并默认选择最后一个子图作为"当前"图

绘制图表,

常用图表形式包括:

  • plot,折线图或点图,实际是调用了line模块下的Line2D图表接口
  • scatter,散点图,常用于表述两组数据间的分布关系,也可由特殊形式下的plot实现
  • bar/barh,条形图或柱状图,常用于表达一组离散数据的大小关系,比如一年内每个月的销售额数据;默认竖直条形图,可选barh绘制水平条形图
  • hist,直方图,形式上与条形图很像,但表达意义却完全不同:直方图用于统计一组连续数据的分区间分布情况,比如有1000个正态分布的随机抽样,那么其直方图应该是大致满足钟型分布;条形图主要是适用于一组离散标签下的数量对比
  • pie,饼图,主要用于表达构成或比例关系,一般适用于少量对比
  • imshow,显示图像,根据像素点数据完成绘图并显示

配置图例

对所绘图形进一步添加图例元素,例如设置标题、坐标轴、文字说明等,常用接口如下:

  • title,设置图表标题
  • axis/xlim/ylim,设置相应坐标轴范围,其中axis是对后xlim和ylim的集成,接受4个参数分别作为x和y轴的范围参数
  • grid,添加图表网格线
  • legend,在图表中添加label图例参数后,通过legend进行显示
  • xlabel/ylabel,分别用于设置x、y轴标题
  • xticks/yticks,分别用于自定义坐标轴刻度显示
  • text/arrow/annotation,分别在图例指定位置添加文字、箭头和标记,一般很少用

示例:

plt.figure()
plt.plot([1, 2, 3], [4, 5, 6])
plt.show()

# 第二种方式
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [4, 5, 6])
plt.show()

两种方式产生的结果完全一样。从第一种方式的代码来看,先生成了一个Figure画布,然后在这个画布上隐式生成一个画图区域进行画图。
第二种方式同时生成了Figure和axes两个对象,然后用ax对象在其区域内进行绘图。如果从面向对象编程(对理解Matplotlib绘图很重要)的角度来看,显然第二种方式更加易于解释,生成的fig和ax分别对画布Figure和绘图区域Axes进行控制,第一种方式反而显得不是很直观,如果涉及到子图零部件的设置,第二种方式显然会更易于使用。

subplot绘制多个子图

生成画布和axes对象:

# nrows=1和ncols=2分别代表1行和2列
fig,ax = plt.subplots(nrows=1,ncols=2)

对两个对象进行绘制:

ax[0].plot([1,2,3],[4,5,6])
ax[1].scatter([1,2,3],[4,5,6])

在这里插入图片描述

add_subplot与add_axes

add_subplot表示新增子图与subplots相似:

import numpy as np
import matplotlib.pyplot as plt

# 新建figure
fig = plt.figure()
# 定义数据
x = [1, 2, 3, 4, 5, 6, 7]
y = [1, 2, 3, 4, 5, 6, 7]

# 新增子图1
ax1 = fig.add_subplot(1, 2, 1)
ax1.plot(x, y, 'r')
ax1.set_title('area1')

# 新增子图2
ax2 = fig.add_subplot(1, 2, 2)
ax2.plot(x, y, 'b')
ax2.set_title('area2')
plt.show()

在这里插入图片描述
add_axes表示新增子区域,该区域可以座落在figure内任意位置,且该区域可任意设置大小:

import numpy as np
import matplotlib.pyplot as plt

#新建figure
fig = plt.figure()
# 定义数据
x = [1, 2, 3, 4, 5, 6, 7]
y = [1, 2, 3, 4, 5, 6, 7]
#新建区域ax1
#figure的百分比,从figure 10%的位置开始绘制, 宽高是figure的80%
left, bottom, width, height = 0.1, 0.1, 0.8, 0.8
# 获得绘制的句柄
ax1 = fig.add_axes([left, bottom, width, height])
ax1.plot(x, y, 'r')
ax1.set_title('area1')

#新增区域ax2,嵌套在ax1内
left, bottom, width, height = 0.2, 0.6, 0.25, 0.25
# 获得绘制的句柄
ax2 = fig.add_axes([left, bottom, width, height])
ax2.plot(x,y, 'b')
ax2.set_title('area2')
plt.show()

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值