matplotlib基本功能详解
matplotlib具有广泛的代码库,可能会使许多新用户望而却步。但是,大多数matplotlib可以通过相当简单的概念框架和一些要点的知识来理解。
基本绘图
绘图核心API
案例:绘制一条余弦曲线
import numpy as np
import matplotlib.pyplot as mp
# xarray: <序列> 水平坐标序列
# yarray: <序列> 垂直坐标序列
mp.plot(xarray, yarray)
#显示图表
mp.show()
绘制水平线(hlnes)与垂直线(vlines):
import numpy as np
import matplotlib.pyplot as mp
# vertical 绘制垂直线
mp.vlines(vval, ymin, ymax, ...)
# horizotal 绘制水平线
mp.hlines(xval, xmin, xmax, ...)
#显示图表
mp.show()
线型、线宽和颜色
案例:绘制一条正弦曲线(plot)
#linestyle:线型 '-' '--' '-.' ':'
#linewidth:线宽
# 数字
#color: <关键字参数> 颜色
# 英文颜色单词 或 常见颜色英文单词首字母 或 #495434 或 (1,1,1) 或 (1,1,1,1)
#alpha: <关键字参数> 透明度
# 浮点数值
mp.plot(xarray, yarray, linestyle='', linewidth=1, color='', alpha=0.5)
设置坐标轴范围
案例:把坐标轴范围设置为 -π ~ π
#x_limt_min: <float> x轴范围最小值
#x_limit_max: <float> x轴范围最大值
mp.xlim(x_limt_min, x_limit_max)
#y_limt_min: <float> y轴范围最小值
#y_limit_max: <float> y轴范围最大值
mp.ylim(y_limt_min, y_limit_max)
设置坐标刻度
案例:把横坐标的刻度显示为:0, π/2, π, 3π/2, 2π
#x_val_list: x轴刻度值序列
#x_text_list: x轴刻度标签文本序列 [可选]
mp.xticks(x_val_list , x_text_list )
#y_val_list: y轴刻度值序列
#y_text_list: y轴刻度标签文本序列 [可选]
mp.yticks(y_val_list , y_text_list )
刻度文本的特殊语法 – LaTex排版语法字符串
r'$x^n+y^n=z^n$', r'$\int\frac{1}{x} dx = \ln |x| + C$', r'$-\frac{\pi}{2}$'
x n + y n = z n , ∫ 1 x d x = ln ∣ x ∣ + C , − π 2 x^n+y^n=z^n, \int\frac{1}{x} dx = \ln |x| + C, -\frac{\pi}{2} xn+yn=zn,∫x1dx=ln∣x∣+C,−2π
设置坐标轴
坐标轴名:left / right / bottom / top
# 获取当前坐标轴字典,{'left':左轴,'right':右轴,'bottom':下轴,'top':上轴 }
ax = mp.gca()
# 获取其中某个坐标轴
axis = ax.spines['坐标轴名']
# 设置坐标轴的位置。 该方法需要传入2个元素的元组作为参数
# type: <str> 移动坐标轴的参照类型 一般为'data' (以数据的值作为移动参照值)
# val: 参照值
axis.set_position((type, val))
# 设置坐标轴的颜色
# color: <str> 颜色值字符串
axis.set_color(color)
案例:设置坐标轴至中心。
#设置坐标轴
ax = mp.gca()
axis_b = ax.spines['bottom']
axis_b.set_position(('data', 0))
axis_l = ax.spines['left']
axis_l.set_position(('data', 0))
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
图例
显示两条曲线的图例,并测试loc属性。
# 再绘制曲线时定义曲线的label
# label: <关键字参数 str> 支持LaTex排版语法字符串
mp.plot(xarray, yarray ... label='', ...)
# 设置图例的位置
# loc: <关键字参数> 制定图例的显示位置 (若不设置loc,则显示默认位置)
# =============== =============
# Location String Location Code
# =============== =============
# 'best' 0
# 'upper right' 1
# 'upper left' 2
# 'lower left' 3
# 'lower right' 4
# 'right' 5
# 'center left' 6
# 'center right' 7
# 'lower center' 8
# 'upper center' 9
# 'center' 10
# =============== =============
mp.legend(loc='')
特殊点
案例:绘制当x=3π/4时两条曲线上的特殊点。
# xarray: <序列> 所有需要标注点的水平坐标组成的序列
# yarray: <序列> 所有需要标注点的垂直坐标组成的序列
mp.scatter(xarray, yarray,
marker='', #点型 ~ matplotlib.markers
s='', #大小,可设置为数组,相对应的
edgecolor='', #边缘色
facecolor='', #填充色
zorder=3 #绘制图层编号 (编号越大,图层越靠上)
)
marker点型可参照:help(matplotlib.markers)
marker点型参考:https://matplotlib.org/api/markers_api.html?highlight=markers#module-matplotlib.markers
也可参照附录: matplotlib point样式
备注
案例:为在某条曲线上的点添加备注,指明函数方程与值。
# 在图表中为某个点添加备注。包含备注文本,备注箭头等图像的设置。
mp.annotate(
r'$\frac{\pi}{2}$', #备注中显示的文本内容
xycoords='data', #备注目标点所使用的坐标系(data表示数据坐标系)
xy=(x, y), #备注目标点的坐标
textcoords='offset points', #备注文本所使用的坐标系(offset points表示参照点的偏移坐标系)
xytext=(x, y), #备注文本的坐标
fontsize=14, #备注文本的字体大小
arrowprops=dict() #使用字典定义文本指向目标点的箭头样式
)
arrowprops参数使用字典定义指向目标点的箭头样式
#arrowprops字典参数的常用key
arrowprops=dict(
arrowstyle='', #定义箭头样式
connectionstyle='' #定义连接线的样式
)
箭头样式(arrowstyle)字符串如下
============ =============================================
Name Attrs
============ =============================================
'-' None
'->' head_length=0.4,head_width=0.2
'-[' widthB=1.0,lengthB=0.2,angleB=None
'|-|' widthA=1.0,widthB=1.0
'-|>' head_length=0.4,head_width=0.2
'<-' head_length=0.4,head_width=0.2
'<->' head_length=0.4,head_width=0.2
'<|-' head_length=0.4,head_width=0.2
'<|-|>' head_length=0.4,head_width=0.2
'fancy' head_length=0.4,head_width=0.4,tail_width=0.4
'simple' head_length=0.5,head_width=0.5,tail_width=0.2
'wedge' tail_width=0.3,shrink_factor=0.5
============ =============================================
连接线样式(connectionstyle)字符串如下
============ =============================================
Name Attrs
============ =============================================
'angle' angleA=90,angleB=0,rad=0.0
'angle3' angleA=90,angleB=0`
'arc' angleA=0,angleB=0,armA=None,armB=None,rad=0.0
'arc3' rad=0.0
'bar' armA=0.0,armB=0.0,fraction=0.3,angle=None
============ =============================================
图形对象(图形窗口)
案例:绘制两个窗口,一起显示。
# 手动构建 matplotlib 窗口
mp.figure(
'', #窗口标题栏文本
figsize=(4, 3), #窗口大小 <元组>
dpi=120, #像素密度
facecolor='' #图表背景色 可简写为fc=‘’
)
mp.show()
mp.figure方法不仅可以构建一个新窗口,如果已经构建过titl