matplotlib

Matplotlib可视化

1一幅可视化图的基本结构

通常,使用 numpy 组织数据, 使用 matplotlib API 进行数据图像绘制。 一幅数据图基本上包括如下结构:

Data: 数据区,包括数据点、描绘形状
Axis: 坐标轴,包括 X 轴、 Y 轴及其标签、刻度尺及其标签
Title: 标题,数据图的描述
Legend: 图例,区分图中包含的多种曲线或不同分类的数据
其他的还有图形文本 (Text)、注解 (Annotate)等其他描述

image.png

2.画法

下面以常规图为例,详细记录作图流程及技巧。按照绘图结构,可将数据图的绘制分为如下几个步骤:

导入 matplotlib 包相关工具包
准备数据,numpy 数组存储
绘制原始曲线
配置标题、坐标轴、刻度、图例
添加文字说明、注解
显示、保存绘图结果
下面是一个包含cos、sin、sqrt函数的完整图像:


image.png
#导入包
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from pylab import *
#准备数据 numpy常用来组织源数据:
#定义数据部分
x = np.arange(0 , 10 , 0.2)
y1 = np.cos(x)
y2 = np.sin(x)
y3 = np.sqrt(x)
#绘制基本曲线
plt.rcParams['figure.figsize'] = (12,8)
plt.plot(x,y1,color = 'blue' , linewidth = 1.5 ,linestyle = '-' , marker = '.' , label = r'$y = cos{x}$')
plt.plot(x,y2 ,color = 'green' , linewidth = 1.5 , linestyle = '-',marker = '*',label = r'$y = sin{x}$')
plt.plot(x,y3,color = 'm' , linewidth = 1.5 , linestyle = '-' , marker = 'x' , label = r'$y = \sqrt{x}$)
image.png

3.关于颜色的一些补充

主要是color参数:

r 红色
g 绿色
b 蓝色
c cyan
m 紫色
y 土黄色
k 黑色
w 白色


颜色

linestyle 参数:linestyle 参数主要包含虚线、点化虚线、粗虚线、实线,如下:


线条参数

marker 参数:


marker

4.设置坐标轴

可以通过如下代码,移动坐标轴spines

# 坐标轴上移
ax = plt.subplot(111)
#ax = plt.subplot(2,2,1)
ax.spines['right'].set_color('none')     # 去掉右边的边框线
ax.spines['top'].set_color('none')       # 去掉上边的边框线
# 移动下边边框线,相当于移动 X 轴
ax.xaxis.set_ticks_position('bottom')    
ax.spines['bottom'].set_position(('data', 0))
# 移动左边边框线,相当于移动 y 轴
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))
image.png
# 设置 x, y 轴的刻度取值范围
plt.xlim(x.min()*1.1, x.max()*1.1)
plt.ylim(-1.5, 4.0)
# 设置 x, y 轴的刻度标签值
plt.xticks([2, 4, 6, 8, 10], [r'two', r'four', r'six', r'8', r'10'])
plt.yticks([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0],
    [r'-1.0', r'0.0', r'1.0', r'2.0', r'3.0', r'4.0'])
image.png
# 设置标题、x轴、y轴
plt.title(r'$the \ function \ figure \ of \ cos(), \ sin() \ and \ sqrt()$', fontsize=19)
plt.xlabel(r'$the \ input \ value \ of \ x$', fontsize=18, labelpad=88.8)
plt.ylabel(r'$y = f(x)$', fontsize=18, labelpad=12.5)
image.png
#设置文字描述、注解
plt.text(0.8, 0.9, r'$x \in [0.0, \ 10.0]$', color='k', fontsize=15)
plt.text(0.8, 0.8, r'$y \in [-1.0, \ 4.0]$', color='k', fontsize=15)
image.png
# 特殊点添加注解
plt.scatter([8,],[np.sqrt(8),], 50, color ='m')  # 使用散点图放大当前点
plt.annotate(r'$2\sqrt{2}$', xy=(8, np.sqrt(8)), xytext=(8.002, 2.83), fontsize=16, color='#090909', arrowprops=dict(arrowstyle='->', connectionstyle='arc3, rad=0.1', color='#090909'))
image.png

5.设置图例样式

可使用如下两种方式,给绘图设置图例:

1: 在 plt.plot 函数中添加 label 参数后,使用 plt.legend(loc=’up right’)
2: 不使用参数 label, 直接使用如下命令:
plt.legend(['cos(x)', 'sin(x)', 'sqrt(x)'], loc='upper right')


image.png

6.设置网格

# 显示网格线
plt.grid(True)
image.png

7.图片保存

plt.show()    # 显示
#savefig('../figures/plot3d_ex.png',dpi=48)    # 保存,前提目录存在

8完整的绘制程序

#coding:utf-8
import warnings
warnings.filterwarnings('ignore')
import numpy as np
import matplotlib.pyplot as plt
from pylab import *

# 定义数据部分
x = np.arange(0., 10, 0.2)
y1 = np.cos(x)
y2 = np.sin(x)
y3 = np.sqrt(x)

# 绘制 3 条函数曲线
plt.plot(x, y1, color='blue', linewidth=1.5, linestyle='-', marker='.', label=r'$y = cos{x}$')
plt.plot(x, y2, color='green', linewidth=1.5, linestyle='-', marker='*', label=r'$y = sin{x}$')
plt.plot(x, y3, color='m', linewidth=1.5, linestyle='-', marker='x', label=r'$y = \sqrt{x}$')

# 坐标轴上移
ax = plt.subplot(111)
ax.spines['right'].set_color('none')     # 去掉右边的边框线
ax.spines['top'].set_color('none')       # 去掉上边的边框线

# 移动下边边框线,相当于移动 X 轴
ax.xaxis.set_ticks_position('bottom')    
ax.spines['bottom'].set_position(('data', 0))

# 移动左边边框线,相当于移动 y 轴
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))

# 设置 x, y 轴的取值范围
plt.xlim(x.min()*1.1, x.max()*1.1)
plt.ylim(-1.5, 4.0)

# 设置 x, y 轴的刻度值
plt.xticks([2, 4, 6, 8, 10], [r'2', r'4', r'6', r'8', r'10'])
plt.yticks([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], 
    [r'-1.0', r'0.0', r'1.0', r'2.0', r'3.0', r'4.0'])

# 添加文字
plt.text(8, 1.5, r'$x \in [0.0, \ 10.0]$', color='k', fontsize=15)
plt.text(8, 1.8, r'$y \in [-1.0, \ 4.0]$', color='k', fontsize=15)

# 特殊点添加注解
plt.scatter([8,],[np.sqrt(8),], 50, color ='m')  # 使用散点图放大当前点
plt.annotate(r'$2\sqrt{2}$', xy=(8, np.sqrt(8)), xytext=(8.5, 2.2), fontsize=16, color='#090909', arrowprops=dict(arrowstyle='->', connectionstyle='arc3, rad=0.1', color='#090909'))

# 设置标题、x轴、y轴
plt.title(r'$the \ function \ figure \ of \ cos(), \ sin() \ and \ sqrt()$', fontsize=19)
plt.xlabel(r'$the \ input \ value \ of \ x$', fontsize=18, labelpad=88.8)
plt.ylabel(r'$y = f(x)$', fontsize=18, labelpad=12.5)

# 设置图例及位置
plt.legend(loc='best')    
# plt.legend(['cos(x)', 'sin(x)', 'sqrt(x)'], loc='up right')

# 显示网格线
plt.grid(True)    

# 显示绘图
plt.show()
image.png

9 常用图形

曲线图:matplotlib.pyplot.plot(data)
灰度/直方图:matplotlib.pyplot.hist(data)
散点图:matplotlib.pyplot.scatter(data)
箱式/箱线图:matplotlib.pyplot.boxplot(data)

官网:
https://matplotlib.org/api/pyplot_api.html

你可能感兴趣的:(matplotlib)