Matplotlib基础一


目录:

image-20220315090111641

  • Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型的2D图表和一些基本的3D图表,可根据数据集(DataFrame,Series)自行定义x,y轴,绘制图形(线形图,柱状图,直方图,密度图,散布图等等),能够满足大部分需要。
  • Matplotlib最早是为了可视化癫痫病人的脑皮层电图相关的信号而研发,因为在函数的设计上参考了MATLAB,所以叫做Matplotlib。
  • 官方文档: https://matplotlib.org/
  • Matplotlib中最基础的模块是pyplot。

image-20220315090155062

安装

pip install matplotlib
import numpy as np
import matplotlib.pyplot as plt
# 将绘图直接嵌入到notebook中,直接显示图片,不用.show()
%matplotlib inline
# 折线图
plt.plot([1,2,3,4,5],[1,8,27,64,125])
plt.xlabel('Xlabel',fontsize=20)
plt.ylabel('Ylabel',fontsize=20)

# 不同的线条
plt.plot([1,2,3,4,5],[1,8,27,64,125],'D',color='r')
plt.xlabel('Xlabel',fontsize=20)
plt.ylabel('Ylabel',fontsize=20)

Markers

=============   ===============================
character       description
=============   ===============================
``'.'``         point marker
``','``         pixel marker
``'o'``         circle marker
``'v'``         triangle_down marker
``'^'``         triangle_up marker
``'<'``         triangle_left marker
``'>'``         triangle_right marker
``'1'``         tri_down marker
``'2'``         tri_up marker
``'3'``         tri_left marker
``'4'``         tri_right marker
``'8'``         octagon marker
``'s'``         square marker
``'p'``         pentagon marker
``'P'``         plus (filled) marker
``'*'``         star marker
``'h'``         hexagon1 marker
``'H'``         hexagon2 marker
``'+'``         plus marker
``'x'``         x marker
``'X'``         x (filled) marker
``'D'``         diamond marker
``'d'``         thin_diamond marker
``'|'``         vline marker
``'_'``         hline marker
=============   ===============================

**Line Styles**

=============    ===============================
character        description
=============    ===============================
``'-'``          solid line style
``'--'``         dashed line style
``'-.'``         dash-dot line style
``':'``          dotted line style
=============    ===============================

Example format strings::

    'b'    # blue markers with default shape
    'or'   # red circles
    '-g'   # green solid line
    '--'   # dashed line with default color
    '^k:'  # black triangle_up markers connected by a dotted line

**Colors**

The supported color abbreviations are the single letter codes

=============    ===============================
character        color
=============    ===============================
``'b'``          blue
``'g'``          green
``'r'``          red
``'c'``          cyan
``'m'``          magenta
``'y'``          yellow
``'k'``          black
``'w'``          white
=============    ===============================
tang_numpy = np.arange(0,10,0.5)
tang_numpy
array([0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5, 5. , 5.5, 6. ,
       6.5, 7. , 7.5, 8. , 8.5, 9. , 9.5])
plt.plot(tang_numpy,tang_numpy,'r')

# 多条线
plt.plot(tang_numpy,tang_numpy,'r',
         tang_numpy,tang_numpy**2,'bD',
         tang_numpy,tang_numpy**3,'h-.')

# 指定线条宽度
x = np.linspace(-10,10)
y = np.sin(x)
plt.plot(x,y,linewidth=4.0)

# 指定多个参数
plt.plot(x,y,color='y',linestyle='-.',marker='o',markerfacecolor='r',markersize=12)

# 子图 211 两行一列1图
plt.subplot(211)
plt.plot(x,y,"r--")
# 212 两行一列 2 图
plt.subplot(212)
plt.plot(x**2,y**3,"b-.")

plt.subplot(321)
plt.plot(x,y,"r--")
plt.subplot(322)
plt.plot(x**2,y,"b-.")
plt.subplot(323)
plt.plot(x,y**2,"r--")
plt.subplot(324)
plt.plot(x**3,y**2,"b-.")
plt.subplot(325)
plt.plot(x,y**3,"r--")
plt.subplot(326)
plt.plot(x**3,y**3,"b-.")

# 备注
plt.plot(x,y)
plt.xlabel('x:---')
plt.ylabel('y:---')
plt.title('::ploat::')
plt.text(0,0,'abcd')
# 格子
plt.grid(True)

使用与配置

创建空白画布

plt.figure  创建空白画布指定画布大小像素

plt.figure(num=None,  # autoincrement if None, else integer from 1-N
           figsize=None,  # defaults to rc figure.figsize
           dpi=None,  # defaults to rc figure.dpi
           facecolor=None,  # defaults to rc figure.facecolor
           edgecolor=None,  # defaults to rc figure.edgecolor
           frameon=True,
           FigureClass=Figure,
           clear=False,
           **kwargs)

figure.add_subplot  创建子图指定子图的行数列数
add_subplot(nrows, ncols, index, **kwargs)

配置方法

函数名称 函数作用
plt.title 当前图像标题,可以指定标题名称,颜色,位置,字体大小等参数
plt.xlabel 当前图形中X轴的名称,颜色,位置,字体大小等参数
plt.ylabel 当前图形中Y轴的名称,颜色,位置,字体大小等参数
plt.xlim 指定当前图形X轴的范围,只能确定一个数值区间,无法使用字符串标识。
plt.ylim 指定当前图形Y轴的范围,只能确定一个数值区间,无法使用字符串标识。
plt.xticks 指定当前图形X轴的刻度与取值
plt.yticks 指定当前图形Y轴的刻度与取值
plt.legend 指定当前图形的图例,可以指定图形的大小、位置、标签

使用plt.plot绘图

'''
plt.plot(x,y,format_string,**kwargs)
x 轴数据
y 轴数据
fromat_string 控制曲线的格式化字符
'''
颜色字符 说明 颜色字符 说明
‘b’ 蓝色 ‘m’ 洋红色
‘g’ 绿色 ‘k’ 黑色
‘r’ 红色 ’y' 黄色
’c’ 青绿色 ‘w’ 白色
#001234 RGB某颜色 ’0.7‘ 灰度值字符串
样式风格字符 说明 样式风格字符 说明 样式风格字符 说明
’-‘ 实线 ’.‘ 点标记 ’>‘ 右三角
’__‘ 破折线 ’o‘ 实心圆 ’s‘ 实方形
’-.‘ 点划线 ’v‘ 倒三角 ’p‘ 实五角
‘:’ 虚线 ’^‘ 上三角 ’+‘ 十字标记
’,‘ 像素线 ‘<’ 左三角 ’x‘ x标记
’D‘ 菱形 ’*‘ 星形 ’|‘ 垂直线

保存图片

plt.saveflg()  保存图形执行图片分辨率边缘颜色
plt.show()  显示图形

案例一

import numpy as np
import matplotlib.pylab as plt

%matplotlib inline

# 案例1

arr1 = np.arange(0, np.pi * 2, 0.01)

# 确定画图大小
p1 = plt.figure(figsize=(10, 8), dpi=100)

# 创建子图 2行1列
sp1 = p1.add_subplot(2, 1, 1)

# 添加标题
plt.title('line')

# 指定x轴名称
plt.xlabel('X')

# 指定Y轴名称
plt.ylabel('Y')

# X刻度范围
plt.xlim((0, 1))

# Y刻度范围
plt.ylim((0, 1))

# 规定X轴刻度
plt.xticks(np.linspace(0, 1, num=6))

# 规定Y轴刻度
plt.yticks(np.linspace(0, 1, num=6))

# 添加 y = x ^ 2
plt.plot(arr1, arr1 ** 2)

# 添加 y = x ^ 4
plt.plot(arr1, arr1 ** 4)

# 线段显示名称
plt.legend(['y=x^2', 'y=x^4'])

# 创建第二幅图
sp2 = p1.add_subplot(2, 1, 2)

# 添加标题
plt.title('sin/cos')

# 指定x轴名称
plt.xlabel('arr1')

# 指定Y轴名称
plt.ylabel('value')

# X刻度范围
plt.xlim((0, np.pi * 2))

# Y刻度范围
plt.ylim((-1, 1))

# 规定X轴刻度
plt.xticks([0, np.pi / 2, np.pi, np.pi * 1.5, np.pi * 2])

# 规定Y轴刻度
plt.yticks([-1, -0.5, 0, 0.5, 1])

# 添加 y = np.sin(arr1)
plt.plot(arr1, np.sin(arr1),'r-.')

# 添加 y = np.cos(arr1)
plt.plot(arr1, np.cos(arr1),)

# 线段显示名称
plt.legend(['sin', 'cos'])

# 显示图形
plt.show()

# 保存图形
# plt.savefig('sincos.png')

myplot

修改图形的样式

plt.rcParams['lines.linestyle'] = '--'
plt.rcParams['lines.linewidth'] = 3
plt.plot(arr1, np.sin(arr1 ** 2))
plt.show()

image-20220314095429492

设置中文显示

​ 由于默认的pyplot字体并不支持中文字符的显示,因此需要通过设置font.sans-serif参数改变绘图时的字体,使得图形可以正常显示中文。同时,由于更改字体后,会导致坐标轴中的部分字符无法显示,因此需要同时更改axes.unicode_minus参数。

plt.rcParams['font.sans-serif'] = 'SimHei'  # 设置中文显示
plt.rcParams['axes.unicode_minus'] = False

除了设置线条和字体的rc参数外,还有设置文本、箱线图、坐标轴、刻度、图例、标记、图片、图像保存等rc参数。具体参数与取值可以参考官方文档。

No module named 'PIL'错误

# 如果遇到如下错误
ModuleNotFoundError: No module named 'PIL'

# 解决方法:运行卸载命令: 
pip uninstall pillow

# 然后再次运行安装命令:
pip install pillow