Matplotlib学习笔记(一)

Author Avatar
Brian Lee 3月 22, 2018
  • 在其它设备中阅读本文章

matplotlib库是Python优秀的数据可视化第三方库

由各种可视化类构成(每一种可视化的显示效果,封装成一组类),内部结构复杂,受Matlab启发

matplotlib.pyplot是绘制各类可视化图形的命令子库,相当于快捷方式


引入方式

import matplotlib.pyplot as plt

绘图区域

在全局绘图区域中创建一个分区体系,并定位到一个子绘图区域

subplot 函数

使用方法
plt.subplot(nrows, ncols, plot_number)
  • nrows: 绘图区域的行数
  • ncols: 绘图区域的列数
  • plot_number: 当前选取的区域(区域编号从上到下,从左往右)
分区示例
plt.subplot(3,2,4)    #或 plt.subplot(324)

分区

代码示例
import matplotlib.pyplot as plt
import numpy as np

def f(t):
    return np.exp(-t) * np.cos(2 * np.pi * t)

a = np.arange(0.0, 5.0, 0.02)

plt.subplot(211)
plt.plot(a, f(a))

plt.subplot(2, 1, 2)
plt.plot(a, np.cos(2 * np.pi * a), 'r--')
plt.show()

结果为:

分区代码

subplot2grid 函数

理念

设定网格,选中网格,确定选中行列区域数量,编号从0开始

使用方法
plt.subplot2grid(GridSpec, CurSpec, colspan=1, rowspan=1)
  • GridSpec: 一个元祖,表示将区域分为几行几列
  • CurSpec: 所选取的开始区域
  • colspan: 占有几列
  • rowspan: 占有几行
示例
plt.subplot2grid((3, 3), (0, 0), colspan = 3)
plt.subplot2grid((3, 3), (1, 0), colspan = 2)
plt.subplot2grid((3, 3), (1, 2), rowspan = 2)
plt.subplot2grid((3, 3), (2, 0))
plt.subplot2grid((3, 3), (2, 1))

将区域划分成:

区域划分

GridSpec 类

用来子区域设计和选定的类,与 subplot() 函数配合使用

要达成上图效果,代码为:

import matplotlib.pyplot as plt
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])

plot函数

使用

plt.plot(x, y, format_string, **kwargs)
  • x: X轴数据,列表或数组,可选
  • y: Y轴数据,列表或数组
  • format_string: 控制曲线的格式字符串,可选
  • **kwargs: 第二组或更多(x,y,format_string),用于绘制多条曲线

注意

  • 绘制多条曲线时,各曲线的X不能省略
  • 只绘制一条曲线,可省略X,Y轴的索引值作为X轴

format_string

控制曲线的格式字符串,可选。由颜色字符、风格字符和标记字符组成

颜色字符
颜色字符 说明 颜色字符 说明
‘b’ 蓝色 ‘m’ 洋红色
‘g’ 绿色 ‘y’ 黄色
‘r’ 红色 ‘k’ 黑色
‘c’ 青绿色 ‘w’ 白色
‘#008000’ RGB某颜色 ‘0.8’ 灰度值字符串
风格字符
风格字符 说明
‘ - ‘ 实线
‘ - - ‘ 破折线
‘ - . ‘ 点划线
‘ : ‘ 虚线
‘ ‘ ‘ ‘ 无线条
标记字符
标记字符 说明 标记字符 说明 标记字符 说明
‘ . ‘ 点标记 ‘ 1 ‘ 下花三角标记 ‘ h ‘ 竖六边形标记
‘ , ‘ 像素标记 ‘ 2 ‘ 上花三角标记 ‘ H ‘ 横六边形标记
‘ o ‘ 实心圈标记 ‘ 3 ‘ 左花三角标记 ‘ + ‘ 十字标记
‘ v ‘ 倒三角标记 ‘ 4 ‘ 右花三角标记 ‘ x ‘ x标记
‘ ^ ‘ 上三角标记 ‘ s ‘ 实心方形标记 ‘ D ‘ 菱形标记
‘ > ‘ 右三角标记 ‘ p ‘ 实心五角标记 ‘ d ‘ 瘦菱形标记
‘ < ‘ 左三角标记 ‘ * ‘ 星形标记 ‘ I ‘ 垂直线标记
其他

除了可以使用格式字符串外,还可以使用参数命令

  • color: 控制颜色,color = ‘green’
  • linestyle: 线条风格,linestyle = ‘dashed’
  • marker: 标记风格,marker = ‘o’
  • markerfacecolor: 标记颜色,markerfacecolor = ‘blue’
  • markersize: 标记尺寸,markersize = 20

代码示例

import matplotlib.pyplot as plt
import numpy as np

a = np.arange(10)
plt.plot(a, a*1.5, 'go:', a, a*2.5, 'rx', a, a*3.5, 'c*', a, a*4.5, 'b-.')
plt.show()

结果为:

plot结果


中文显示

rcParams 修改字体实现

此方法所有汉字数字都会使用指定字体

使用
import matplotlib
matplotlib.rcParams['font.family'] = 'STSong'
属性
属性 说明
‘font.family’ 用于显示字体的名字
‘font.style’ 字体风格,正常’normal’或 斜体’italic’
‘font.size’ 字体大小,整数字号或者’large’、 ‘x‐small’
中文字体种类
中文字体 说明
‘SimHei’ 中文黑体
‘Kaiti’ 中文楷体
‘LiSu’ 中文隶书
‘FangSong’ 中文仿宋
‘YouYuan’ 中文幼圆
‘STSong’ 华文宋体
代码示例
import numpy as np
import matplotlib
import matplotlib.pyplot as plt

matplotlib.rcParams['font.family'] = 'STSong'
matplotlib.rcParams['font.size'] = 15

a = np.arange(0.0, 5.0, 0.02)

plt.xlabel('横轴:时间')
plt.ylabel('纵轴:振幅')
plt.plot(a, np.cos(2 * np.pi * a), 'r--')
plt.show()

结果为:

汉字示例

fontproperties 属性

在有中文的地方增加此属性

代码示例
import numpy as np
import matplotlib.pyplot as plt

a = np.arange(0.0, 5.0, 0.02)

plt.xlabel('横轴:时间', fontproperties = 'YouYuan', fontsize = '15')
plt.ylabel('纵轴:振幅', fontproperties = 'YouYuan', fontsize = '15')
plt.plot(a, np.cos(2 * np.pi * a), 'r--')
plt.show()

结果:

汉字示例2


文本显示

函数

函数 说明
plt.xlabel() 对X轴增加文本标签
plt.ylabel() 对Y轴增加文本标签
plt.title() 对图形整体增加文本标签
plt.text() 在任意位置增加文本
plt.annotate() 在图形中增加带箭头的注解

annotate() 详解

plt.annotate(s, xy=arrow_crd, xytext=text_crd, arrowprops=dict)
  • s: 显示的内容
  • xy: 箭头要指向的内容
  • xytext: 文本的位置
  • arrowprops: 箭头属性,包括:
    • facecolor: 颜色
    • shrink: 知识内容到箭头的距离
    • width: 箭头宽度

代码示例

import numpy as np
import matplotlib.pyplot as plt

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

plt.xlabel('横轴:时间', fontproperties = 'STSong', fontsize = 15, color = 'green')
plt.ylabel('纵轴:振幅', fontproperties = 'STSong', fontsize = 15, color = 'green')
plt.title(r'正弦波实例 $y=cos(2\pi x)$', fontproperties = 'YouYuan', fontsize = 25)
plt.text(2, -1.5, r'$\mu=100$', fontsize = 15)
plt.annotate(r'$\mu=100$', xy=(2,1), xytext=(3, 1.5), arrowprops=dict(facecolor='black', shrink=0.2, width=2))

plt.axis([-1, 6, -2, 2])    #确定坐标范围
plt.grid(True)  #加网格
plt.show()

结果为:

文本示例

本博客采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!
本文链接:http://brianleelxt.top/2018/03/22/mat-learn/