pyplot的文本显示函数

Matplotlib还有很多向图像中各种位置添加各类文本的方法:

函数 描述
plt.xlabel(xlabel) 对x轴增加文本标签
plt.ylabel(ylabel) 对y轴增加文本标签
plt.title(label, loc=’center’) 对图形整体增加文本标签
plt.text(x, y, s) 在任意位置增加文本
plt.annotate(s, xy, *args, **kwargs) 在图形中增加带箭头的注解

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import matplotlib.pyplot as plt
import numpy as np

a = np.arange(0, 5, 0.02)
plt.plot(a, np.cos(2 * np.pi * a), 'r--')

plt.xlabel("时间", fontproperties = 'SimHei', fontsize=15, color='green')
plt.ylabel("振幅", fontproperties = 'SimHei', fontsize=15)
plt.title(r'正弦波实例$y=cos(2\pi x)$', fontproperties='SimHei', fontsize=15)
plt.text(2, 1, r'$\mu=100$', fontsize=15)

plt.axis([-1, 6, -2, 2])
plt.grid(True) #网格线
plt.show()

01

matplotlib在任何文本表达式中接受TeX方程表达式. 例如, 要在标题中写入表达式σi=15, 您可以编写由美元符号包围的TeX表达式:
plt.title(r'$\sigma_i=15$')
标题字符串前面的r很重要, 它表示该字符串是一个原始字符串, 而不是将反斜杠视为python转义. matplotlib有一个内置的TeX表达式解析器和布局引擎, 并提供自己的数学字体(有关详细信息, 参阅 数学表达式 . 因此, 可以跨平台使用数学文本, 而无需安装TeX. 对于安装了LaTeX和dvipng的用户, 还可以使用LaTeX格式化文本并将输出直接合并到显示图或保存的postscript中(有关详细信息, 参阅 使用LaTeX进行文本渲染 ).

还可以尝试将text函数改为下列代码:
plt.annotate(r'$\mu=100$', xy=(2, 1), xytext=(3, 1.5), arrowprops=dict(facecolor='black', shrink=0.1, width=2))
具体使用可以参考 annotate使用文档 . 因为并不常用, 就不展开说明了.

pyplot的子绘图区域

matplotlib.pyplot.subplot2grid(shape, loc, rowspan=1, colspan=1, fig=None, **kwargs) [官方文档]

  • shape: 两个整数序列, 放置轴的栅格的形状. 第一个序列是行数, 第二个序列是列数.
  • loc: 两个整数的序列, 用于在轴网中放置轴的位置. 第一个序列是行号, 第二个条序列是列号.
  • rowspan: 当前轴要向右跨的行数.
  • colspan: 当前轴要向下跨的列数.
  • fig: 用于放置轴的图形.

例如:

02

1
2
3
4
5
plt.subplot2grid((3, 3), (0, 0), colspan=3)    #ax1
plt.subplot2grid((3, 3), (1, 0), colspan=2) #ax2
plt.subplot2grid((3, 3), (1, 2), rowspan=3) #ax3
plt.subplot2grid((3, 3), (2, 0)) #ax4
plt.subplot2grid((3, 3), (2, 1)) #ax5

还可以使用GridSpec()实现同样的功能:

matplotlib.gridspec.GridSpec(nrows, ncols, figure=None, left=None, bottom=None, right=None, top=None, wspace=None, hspace=None) [官方文档]

  • nrows: 行数
  • ncols: 列数
  • figure: 图形
  • left, btton, right, top: 子图的范围, 作为图形宽度或高度的一部分. 左边不能大于右边, 底部不能大于顶部.
  • wspace, hspace: 子图之间间隔的宽度和高度.
1
2
3
4
5
6
7
8
9
import matplotlib.gridspec as gridspec

gs = gridspec.GridSpec(3, 3)

ax1 = plt.subplot(gs[0, :])
ax2 = plt.subplot(gs[1, :-1])
ax3 = plt.subplot(gs[1:, -1])
ax4 = plt.subplot(gs[2, 0])
ax5 = plt.subplot(gs[2: 1])

pyplot基础图表概述

pyplot的基础图表函数

函数 描述
plt.plot(x, y, fmt, …) 绘制一个坐标图
plt.boxplot(data, notch, position)) 绘制一个箱形图
plt.bar(left, height, width, bottom) 绘制一个条形图
plt.barh(width, bottom, left, height) 绘制一个横向条形图
plt.polar(theta, r) 绘制极坐标图
plt.pie(data, explode) 绘制饼图
plt.psd(x, NFFT=256, pad_to, Fs) 绘制功率谱密度图
plt.specgram(x, NFFT=256, pad_to, F) 绘制谱图
plt.cohere(x, y, NFFT=256, Fs) 绘制X‐Y的相关性函数
plt.scatter(x, y) 绘制散点图, 其中, x和y长度相同
plt.step(x, y, where) 绘制步阶图
plt.hist(x, bins, normed) 绘制直方图
plt.contour(X, Y, Z, N) 绘制等值图
plt.vlines() 绘制垂直图
plt.stem(x, y, linefmt, markerfmt) 绘制柴火图
plt.plot_date() 绘制数据日期

pyplot饼图的绘制

matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False, *, data=None) [官方文档]

  • x: 数据数组.
  • explode: 对应数据数组x的每个数据突出比例.
  • labels: 数据数组对应的标签数组.
  • colors: 数据数组对应的颜色数组.
  • autopct: 中间显示百分数的方式.
  • pctdistance: 每个饼块的中心与由autopct生成的文本的起始点之间的比率. 如果autopct为None, 则忽略.
  • shadow: 是否有阴影.
  • labeldistance :饼块和对于标签之间的距离比率.
  • startangle: 将饼图的起点从x轴逆时针按给定的角度旋转.
  • radius: 饼图的半径.
  • counterclock: 指定分数方向, 顺时针或逆时针.
  • wedgeprops: 传递各项饼图形状数据, 如 wedgeprops={* ‘linewidth’: 3} 设定边框线宽为3.
  • textprops: 传递文本参数的数据.
  • center: 指定图标的中心位置.
  • frame: 是否使用坐标轴框架.
  • rotatelabels: 标签是否旋转到对应饼块的角度.

例如:

1
2
3
4
5
6
7
import matplotlib.pyplot as plt

sizes = [15, 30 ,45, 10]
explode = [0, 0.1, 0, 0]
labels = ['Freshman', 'Sophomore', 'Junior', 'Senior']
plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=False, startangle=90)
plt.show()

03

另外, 再加一行代码
plt.axis('equal')
即可设定饼图等边平面摆放.

pyplot直方图的绘制

matplotlib.pyplot.hist(x, bins=None, range=None, density=None, weights=None, cumulative=False, bottom=None, histtype=’bar’, align=’mid’, orientation=’vertical’, rwidth=None, log=False, color=None, label=None, stacked=False, *, data=None, **kwargs) [官方文档]

  • x: 数据数组.*
  • bins: 直方图的个数.*
  • range: 直方图的上下限.*
  • density: 如果为真, 返回元组的第一个元素*将是归一化后形成概率密度的计数.
  • weights: 给定数据数组的权重.*
  • cumulative: 如果为True, 则在直方图的每个*直方给出该直方中的计数加上所有直方中最小的值的和.
  • bottom: 每个直方的基线位置.*
  • histtype: {‘bar’, ‘barstacked’, ‘step’, *’stepfilled’}, 要绘制的直方图类型.
    • ‘bar’是一种传统的条形直方图. 如果给定多*个数据, 则条形图并排排列.
    • ‘barstacked’是一种条形柱状图, 其中多个数*据堆叠在一起.
    • ‘step’生成一个默认未填充的lineplot.*
    • ‘stepfilled’生成一个默认填充的lineplot.*
  • align: {‘left’, ‘mid’, ‘right’} 控制直方*图的绘制方式.
    • ‘left’:栏位居中于左侧直方边缘.*
    • ‘mid’:栏位位于直方边的中间.*
    • ‘right’:栏位位于右侧直方边缘.*
  • orientation: {‘horizontal’, ‘vertical’},* 水平或垂直直方图.
  • rwidth: 直方宽度.*
  • log: 是否使用对数.*
  • color: 颜色规格或颜色序列.*
  • label: 字符串或字符串序列, 以匹配多个数*据集.
  • stacked: 如果为真, 则多个数据堆叠在一起.*

例如:

1
2
3
4
5
import matplotlib.pyplot as plt
import numpy as np

a = np.random.normal(100, 20, size=100)
plt.hist(a, 100, bottom=10, orientation='horizontal')

04

pyplot极坐标图的绘制

plt.polar(theta, r, **kwargs) [官方文档]

  • theta: 极坐标方向数据
  • r: 极坐标半径数据

例如:

1
2
3
4
5
6
7
import matplotlib.pyplot as plt
import numpy as np

theta = np.linspace(0.0, 2 * np.pi, 20)
r= 10 * np.random.rand(20)
plt.polar(theta, r, color = 'chartreuse', linewidth = 2, marker = '*', mfc = 'b', ms = 10)
plt.show()

05

pyplot散点图的绘制

matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, *, data=None, **kwargs) [官方文档]

  • x, y: 散点的位置数据.
  • s: 点的大小.
  • c: 点的颜色.
  • maker: 标记风格规范[官方文档].
  • cmap: 颜色规范[官方文档].
  • norm: 亮度规范[官方文档].
  • vmin, vmax: 最大最小亮度.
  • alpha: 点的透明度, 介于0(透明)-1(不透明).
  • linewidths: 标记边缘的线宽.
  • edgecolors: 标记边缘的颜色.

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np

x = np.random.randn(100)
y = np.random.randn(100)

plt.scatter(x, y,
s = np.power(10*x+20*y, 2),
c = np.random.rand(100),
cmap = mpl.cm.RdYlBu,
marker = 'o',
alpha = 0.3)
plt.show()

06