matplotlib基础库使用
#
matplotlib.pyplot的画图设置函数,以下函数的每一个设置项直接对应图上的一个位置
图的title(标题)设置
matplotlib.pyplot.title(label, fontdict=None, loc='center', pad=None, **kwargs)
label: title(标题)显示的内容,比如说,改坐标图标识车子的时间速度关系图
fontdict: 字典内容,用于控制title显示的样式, 通常使用默认值,以下是其默认值
{
'fontsize': rcParams['axes.titlesize'],
'fontweight' : rcParams['axes.titleweight'],
'verticalalignment': 'baseline',
'horizontalalignment': loc
}
loc: 控制title显示的位置,可选择的值:{'center', 'left', 'right'}
默认值为center
pad:
kwargs:一般我们使用class matplotlib.text.Text支持的属性参数设置title的样式,
具体参见该类的valid kwargs , fontdict是从其中抽取的部分设置参数
返回值类型: class matplotlib.text.Text
示例一
import matplotlib.pyplot as plt
#图形输入值
input_values = [1,2,3,4,5]
#图形输出值
squares = [1,4,9,16,25]
#plot根据列表绘制出有意义的图形,linewidth是图形线宽,可省略
plt.plot(input_values,squares,linewidth=5)
#设置图标标题
plt.title("Square Numbers",fontsize = 24, color ="red" )
#设置坐标轴标签
plt.xlabel("Value",fontsize = 14 )
plt.ylabel("Square of Value",fontsize = 14)
#设置刻度标记的大小
plt.tick_params(axis='both',labelsize = 14)
#打开matplotlib查看器,并显示绘制图形
plt.show()
x,y轴意义说明
matplotlib.pyplot.xlabel(xlabel, fontdict=None, labelpad=None, **kwargs)
xlabel: x axis label x轴显示的内容,x,y轴的标签说明,比如标识时间,速度
fontdict:
labelpad: 设置x轴显示的内容与x轴之间的距离
kwargs:一般我们使用class matplotlib.text.Text支持的属性参数设置xlabel的样式,
具体参见该类的valid kwargs , fontdict是从其中抽取的部分设置参数
matplotlib.pyplot.ylabel(ylabel, fontdict=None, labelpad=None, **kwargs)
使用方法同上
刻度尺比例定义
matplotlib.pyplot.xscale(value, **kwargs)
常规的刻度尺之间比例是一比一,但是log函数是10倍关系,。。。这个函数定义刻度尺之间的比例
value : {"linear", "log", "symlog", "logit", ...}
用于设置x轴的样式,比如线性轴表示,轴上每一个点之间距离相等,log表示采用log函数
的梯度,等距离点之间是10倍关系 , 等等
kwargs:
matplotlib.scale.LinearScale等类型的设置参数,具体可以参照各类
除了包提供的四种类型以外,用户还可以自定义类型
matplotlib.pyplot.yscale(value, **kwargs)
使用方法同上
刻度尺和刻度定义
matplotlib.pyplot.xticks(ticks=None, labels=None, **kwargs)
x轴上,每一个坐标点的意义和位置
ticks: x轴上的坐标位置,该位置可用于放置自定义字符串,若无直接放置x轴的坐标数;
若为空,则不显示x轴坐标刻度
labels:自定义的坐标字符串,放置的位置由ticks参数决定,可选
kwargs:一般我们使用class matplotlib.text.Text支持的属性参数设置label的样式,
具体参见该类的valid kwargs
返回值类型: 坐标数组 和 class matplotlib.text.Text
示例一
import numpy as np
from matplotlib import pyplot as plt
x = np.arange(0, 2*np.pi, 0.01)
y = np.sin(x)
plt.plot(x,y)
plt.xticks( np.arange(0,2*np.pi,0.5) )
plt.yticks( [-1, -0.5, 0, 0.5, 1] )
plt.show()
示例二
注:示例在linux下,中文显示可能会出问题
import numpy as np
from matplotlib import pyplot as plt
x = np.arange(0, 2*np.pi, 0.01)
y = np.sin(x)
plt.plot(x,y)
plt.xticks( np.arange(0,2*np.pi,0.5) )
plt.yticks( [-1, -0.5, 0, 0.5, 1] , [ '负1','负0.5', '0', '+0.5', '+1' ], fontproperties="STKAITI")
plt.show()
matplotlib.pyplot.yticks(ticks=None, labels=None, **kwargs)
使用方法同上
设置x轴的显示范围
matplotlib.pyplot.xlim(*args, **kwargs)
输入数据的x轴数据很多时,可以使用这个限制显示一部分
用于设置或者获取x轴的显示范围,使用方式如下
left, right = xlim()
xlim((left, right))
left x轴的最左边,right x轴的最右边
也可以使用单起点,会自动推算另一个
xlim(right=3)
示例一
import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0.01, 5.0, 0.01)
s = np.exp(-t)
plt.plot(t, s)
plt.xlim(5, 0) # decreasing time
plt.xlabel('decreasing time (s)')
plt.ylabel('voltage (mV)')
plt.title('Should be growing...')
#显示背景栅格
plt.grid(True)
plt.show()
matplotlib.pyplot.ylim(*args, **kwargs)
使用方法同上
画图函数
matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)
画图函数,该函数用于设定plt画图的样式,如曲线图,散点图,直方图,颜色,描点方式,等等
使用方式如下:
plot([x], y, [fmt], data=None, **kwargs)
plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)
曲线(图)上的点由x,y决定, fmt是曲线画制的格式,
当x不存在时,x的值默认为0,1,2....n-1,n为y的长度
第二种方式,可以在一个xoy平面上画制多个图形
fmt格式:
fmt = '[color][marker][line]'
kwargs: class matplotlib.lines.Line2D的属性,fmt是一个简单的画图属性设置,
使用该类可以更细致的设置各种参数,如果两者之间出现冲突,以这里的为主
返回值类型:class matplotlib.lines.Line2D对象
它的属性,准确表达了点的位置,图形绘制样式等
Colors 每一个x,y坐标的颜色,单独使用颜色时,也可以使用对应的三基色十六进制数
'b' blue
'g' green
'r' red
'c' cyan
'm' magenta
'y' yellow
'k' black
'w' white
Markers 每一个xy坐标的表示方式,如:点,圆圈,向上的三角,四角形等
'.' 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
's' square marker
'p' pentagon marker
'*' star marker
'h' hexagon1 marker
'H' hexagon2 marker
'+' plus marker
'x' x marker
'D' diamond marker
'd' thin_diamond marker
'|' vline marker
'_' hline marker
Line :线图,线段图等
'-' solid line style
'--' dashed line style
'-.' dash-dot line style
':' dotted line style
返回值类型: class matplotlib.lines.Line2D(....)
其它可选参数:class matplotlib.lines.Line2D
示例一
import matplotlib.pyplot as plt
plt.plot([1,2,3,4], [1,4,9,16], 'ro')
plt.axis([0, 6, 0, 20])
plt.show()
示例二
import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0., 5., 0.2)
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
plt.show()
示例三
import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0., 5., 0.2)
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^', color="yellow")
plt.show()
示例二红蓝绿三色散点图,示例三已经全部改成了黄色
样式说明图(每一个图样的代表意义)
matplotlib.pyplot.legend(*args, **kwargs)
使用方式如下:
legend()
legend(labels)
legend(handles, labels)
第一种方式会自动检测legend的样式,legend的样式可以从所有artist子类中获取,常用的子类比如:
class matplotlib.lines.Line2D, class matplotlib.patches.Patch 等
第二种方式将样式名和样式之间隐式关联,该方式不推荐使用
第三种方式将样式和样式名完美对接,推荐使用的方案
kwargs:legend有很多自己定义的参数,如样式图的位置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
示例一:
import numpy as np
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], color="red", label='Inline label')
plt.legend()
plt.show()
如上示例会自动推断legend的样式
示例二
import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0., 5., 0.2)
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
plt.legend(["red", "blue", "green"])
plt.show()
如上所示,每条线对应一个名字,但名字是写在legend中的,因为所有线的名字不可能一样。
画布设置
matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=<class 'matplotlib.figure.Figure'>, clear=False, **kwargs)
所有图形都是在画布上画的,如果需要画张图片,就需要多个画布(画布有上限设置)
该函数提供了不同画布的引用方式,以及某一画布的大小,底色,分界线颜色等属性的设置
num:通常为整形数据,用于表示是那个画布,默认情况下,系统会自动分配,若为字符串则会自动变成title
如果对应画布的id已经存在,则表示此figure是之前的画布引用
figsize:画布的大小
dpi :画布的像素点
facecolor:画布的非图形绘画区的颜色
示例一:
import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(10.0,10.01), edgecolor='yellow', facecolor ='g')
plt.plot([1, 2, 3], color="red", label='Inline label')
plt.legend()
plt.show()
示例二
import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0.0, 2.0, 0.01)
s1 = np.sin(2*np.pi*t)
s2 = np.sin(4*np.pi*t)
plt.figure(1)
plt.plot(t, s1)
plt.figure(2)
plt.plot(t, s2)
plt.figure(1)
plt.xlabel("lsl")
plt.show()
如上所示,使用两张画布,并在最后重新调用第一张画布,并给他添加属性
子区域
matplotlib.pyplot.subplot(*args, **kwargs)
该函数可用于在一个画布上,画出多个子图形
第一个参数可以是一个三位的整数,依次表示行数,列数和索引。该三位的整数,也可以拆分成三个参数
如下所示,效果一致
fig.add_subplot(235)
fig.add_subplot(2, 3, 5)
索引是从最上面的第一行,从左到右开始增长
在matplotlib中,整个图像为一个Figure对象(画布)。在Figure对象中可以包含一个或者多个Axes对象。
每个Axes(ax)对象都是一个拥有自己坐标系统的绘图区域.
nrows,ncols:
子图的行列数。
sharex, sharey:
设置为 True 或者 ‘all’ 时,所有子图共享 x 轴或者 y 轴,
设置为 False or ‘none’ 时,所有子图的 x,y 轴均为独立,
设置为 ‘row’ 时,每一行的子图会共享 x 或者 y 轴,
设置为 ‘col’ 时,每一列的子图会共享 x 或者 y 轴。
squeeze:
默认为 True,是设置返回的子图对象的数组格式。
当为 False 时,不论返回的子图是只有一个还是只有一行,都会用二维数组格式返回他的对象。
当为 True 时,如果设置的子图是(nrows=ncols=1),即子图只有一个,则返回的子图对象是一个标量的形式,如果子图有(N×1)或者(1×N)个,则返回的子图对象是一个一维数组的格式,如果是(N×M)则是返回二位格式。
subplot_kw:
字典格式,传递给 add_subplot() ,用于创建子图。
gridspec_kw:
字典格式,传递给 GridSpec 的构造函数,用于创建子图所摆放的网格。
class matplotlib.gridspec.GridSpec(nrows, ncols, figure=None, left=None, bottom=None, right=None, top=None, wspace=None, hspace=None, width_ratios=None, height_ratios=None)
如,设置 gridspec_kw={'height_ratios': [3, 1]} 则子图在列上的分布比例是3比1。
**fig_kw :
所有其他关键字参数都传递给 figure()调用。
如,设置 figsize=(21, 12) ,则设置了图像大小。
返回值:
fig: matplotlib.figure.Figure 对象
ax:子图对象( matplotlib.axes.Axes)或者是他的数组
示例一:
import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0.0, 1.0 + 0.01, 0.01)
s = np.cos(2 * 2*np.pi * t)
t[41:60] = np.nan
plt.subplot(2, 1, 1)
plt.plot(t, s, '-', lw=2)
plt.xlabel('time (s)')
plt.ylabel('voltage (mV)')
plt.title('A sine wave with a gap of NaNs between 0.4 and 0.6')
plt.grid(True)
plt.subplot(2, 1, 2)
t[0] = np.nan
t[-1] = np.nan
plt.plot(t, s, '-', lw=2)
plt.title('Also with NaN in first and last point')
plt.xlabel('time (s)')
plt.ylabel('more nans')
plt.grid(True)
#同一画布上的子区域,在排布时可能存在互相之间距离太近,太远,重叠等现象,需要使用函数进行调整各自之间的距离
plt.tight_layout()
plt.show()
示例二:
import numpy as np
import matplotlib.pyplot as plt
prng = np.random.RandomState(19680801) # to ensure reproducibility
fs = 1000
t = np.linspace(0, 0.3, 301)
A = np.array([2, 8]).reshape(-1, 1)
f = np.array([150, 140]).reshape(-1, 1)
xn = (A * np.exp(2j * np.pi * f * t)).sum(axis=0) + 5 * prng.randn(*t.shape)
fig, (ax0, ax1) = plt.subplots(ncols=2)
#ax0, ax1 = plt.subplots(ncols=2, constrained_layout=True)
yticks = np.arange(-50, 30, 10)
yrange = (yticks[0], yticks[-1])
xticks = np.arange(-500, 550, 200)
#功率谱密度图
ax0.psd(xn, NFFT=301, Fs=fs, pad_to=1024, scale_by_freq=True)
ax0.set_title('Periodogram')
ax0.set_yticks(yticks)
ax0.set_xticks(xticks)
#栅格显示
ax0.grid(True)
ax0.set_ylim(yrange)
ax1.psd(xn, NFFT=150, Fs=fs, pad_to=512, noverlap=75, scale_by_freq=True)
ax1.set_title('Welch')
ax1.set_xticks(xticks)
ax1.set_yticks(yticks)
ax1.set_ylabel('') # overwrite the y-label added by `psd`
ax1.grid(True)
ax1.set_ylim(yrange)
plt.show()

浙公网安备 33010602011771号