图的基本结构
通常,使用 numpy 组织数据, 使用 matplotlib API 进行数据图像绘制。 一幅数据图基本上包括如下结构:
- Data: 数据区,包括数据点、描绘形状
- Axis: 坐标轴,包括 X 轴、 Y 轴及其标签、刻度尺及其标签
- Title: 标题,数据图的描述
- Legend: 图例,区分图中包含的多种曲线或不同分类的数据
- 其他的还有图形文本 (Text)、注解 (Annotate)等其他描述
详细的结构图如下图所示:
画法
按照绘图结构,可将数据图的绘制分为如下几个步骤:
- 导入 matplotlib 包相关工具包
- 准备数据,numpy 数组存储
- 绘制原始曲线
- 配置标题、坐标轴、刻度、图例
- 添加文字说明、注解
- 显示、保存绘图结果
导包
#coding:utf-8 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)
绘制基本曲线
使用 plot 函数直接绘制上述函数曲线,可以通过配置 plot 函数参数调整曲线的样式、粗细、颜色、标记等:
# 绘制 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']) # 设置标题、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)
设置文字描述、注解
在数据图中添加文字描述 text:
plt.text(4, 1.68, r'$x \in [0.0, \ 10.0]$', color='k', fontsize=15) plt.text(4, 1.38, r'$y \in [-1.0, \ 4.0]$', color='k', fontsize=15)
// 其中,r’……’ 语句表示使用 LaTex 公式符号.
在数据图中给特殊点添加注解 annotate:
# 特殊点添加注解 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')) """ plt.annotate('%.4f' % acc, xy=(thres, acc), xytext=(thres, acc+0.04), ha='center', color='black', arrowprops=dict(arrowstyle='->', color='black')) #在正上方添加注解 plt.annotate('%.4f' % cov, xy=(thres, cov), xytext=(thres, cov-0.04), ha='center', color='green', arrowprops=dict(arrowstyle='->', color='green')) #在正下方添加注解, ha表示horizontalalignment(水平对齐) """
设置图例
可使用如下两种方式,给绘图设置图例:
1: 在 plt.plot 函数中添加 label 参数后,使用 plt.legend(loc=’up right’)
2: 不使用参数 label, 直接使用如下命令:
plt.legend(['cos(x)', 'sin(x)', 'sqrt(x)'], loc='up right')
loc 参数表示图例的位置,常见的位置参数如下:
网格线开关
# 显示网格线 plt.grid(True)
显示、保存
plt.show() # 显示 # savefig('../figures/plot3d_ex.png',dpi=48) # 保存,前提目录存在
转自:
其它参考: