matploylib库的使用
文章目录
一、figure
1.简单绘制
plt.figure()
:设置画布/窗口num
参数表示图片标题(num=2–figure2)figsize
参数用于设置图片的长和宽
plt.plot()
:绘图color
参数设置颜色,默认蓝色linewidth
参数设置线宽linestyle
参数设置线的形状
import matplotlib.pyplot as plt
x = np.linspace(-3, 3, 50) # 产生[-3,3]之间50个相同间隔的数
y1 = 2 * x + 1
y2 = x ** 2
# 1 简单绘制线图
plt.figure(num=2, figsize=(8, 5)) # 设置一个画布
l2, = plt.plot(x, y2)
# 2 在图上绘制多条曲线/直线
l1, = plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')
2.坐标轴与图例
plt.xlim((start,end))
或plt.ylim((start,end))
:设置x/y轴范围plt.xlabel(string)
,plt.ylabel(string)
:设置轴标签- 注:设置标签有中文时需要设置
fontproperties='SimHei'
- 注:设置标签有中文时需要设置
plt.xticks(ticks)
,plt.yticks(ticks)
:设置轴刻度标签- 前一个参数代表位置,后一个参数代表标签,如果不设置后一个参数,默认将值设为标签
plt.legend(hadles=[,,],labels=[,,],loc='best/upper right/upper left/.../lower right')
:设置图例handles
用于添加图例中的线,需要在前面的plt.plot用l1,形式(需要逗号)prop={'family':'SimHei','size':15}
:显示中文和字号loc
默认是best,自动放置一个合适的位置上labels
设置图例的标签,会覆盖上述的plt.plot()的label
plt.xlim((-1, 2)) # 限制x轴范围
plt.ylim((-2, 3)) # 限制y轴范围
plt.xlabel('x轴', fontproperties='SimHei')
# 设置标签有中文时需要设置fontproperties='SimHei'
plt.ylabel('y轴', fontproperties='SimHei')
xticks = np.linspace(-1, 2, 5) # 设置x轴刻度
plt.xticks(xticks)
# 设置y轴刻度
plt.yticks(np.linspace(-2, 3, 5), ['非常糟糕', '糟糕', 'good', 'very good', '非常好'],
fontproperties='SimHei')
plt.legend(handles=[l1, l2], prop={'family': 'SimHei', 'size': 15},
loc='lower right', labels=['直线', '曲线'])
plt.show()
- 如图所示:
二、移动坐标轴
plt.gca()
:获得当前figure的轴线,若轴线不存在则创造轴线返回ax.spines['top'/'bottom'/'left'/'right'].set_color
:设置图片边框ax.xaxis.set_ticks_position()
:设置x轴刻度的位置(ax.yaxis.set_ticks_position
:y轴)ax.spines['top'/'bottom'/'left'/'right'].set_position(('data'/'axes', 值))
:设置边框位置- data参数与实际值,放置在值的位置,如(‘data’, -1):底部的轴(x轴)放置在y轴数据为-1的位置上
- 'axes’是定位百分比,如(‘axes’,0.1),定位到自身的10%处
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-3, 3, 50)
y1 = 2 * x + 1
y2 = x ** 2
plt.figure(num=2, figsize=(8, 5))
plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')
plt.plot(x, y2)
ax = plt.gca() # 获得当前figure的轴线,若轴线不存在则创造轴线返回
ax.spines['right'].set_color('none') # 设置图像边框(spines)的颜色为空,即取消上边框和右边框
ax.spines['top'].set_color('none')
# 设置坐标轴刻度的位置
ax.xaxis.set_ticks_position('bottom') # x轴刻度放置在x轴下方
ax.yaxis.set_ticks_position('left') # y轴刻度放置在y轴左边
# 设置坐标轴的位置
ax.spines['bottom'].set_position(('data', -1)) # 底部的轴(x轴)放置在y轴数据为-1的位置上
# 另一种方式是定位百分比,如('axes',0.1)---定位到自身的10%处
ax.spines['left'].set_position(('data', 0)) # 左轴(y轴)放置在x轴数据为0的位置上
plt.yticks(np.linspace(-5, 9, 5), ['非常糟糕', '糟糕', 'good', 'very good', '非常好'],
fontproperties='SimHei')
plt.show()
- 如图:
三、标注
.scatter(x,y)
:散点图plt.annotate()
:在图中添加注释xycoords='data'
:基于数据的值来选位置xytext=(+30, -30)
:与xy的偏差值,向右方偏离30,向下偏离30textcoords='offset points'
:标注位置的描述arrowprops
:对图中箭头类型的一些设置。
plt.text(x,y,string, fontdict={})
:文字注释- 前两个参数是相对于坐标轴的位置;中间是注释内容,因为携带希腊字母,用$$形式包围,中间的空格用’'代替;最后是对注释内容的外观设置
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-3, 3, 20)
y = 2 * x + 1
plt.figure(figsize=(8, 5))
plt.plot(x, y)
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('data', 0))
# 设置特定点
x0 = 1
y0 = 2 * x0 + 1
# 绘制散点图
plt.scatter(x0, y0, s=50, color="b") # 在图上添加了(x0,y0)这个点,s表示大小
plt.plot([x0, x0], [0, y0], 'k--', lw=2.5) # 添加了[x0,0]到[x0,y0]的线段
# k--是黑色虚线,lw=linewidth线宽
# 添加注释
plt.annotate('2x+1=%s' % y0, xy=(x0, y0), xycoords='data', xytext=[+30, -30], textcoords='offset points',
fontsize=16, arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=.2'))
# 添加文字注释
plt.text(-3, 3, r"$This\ is\ some\ text.\mu_i$", fontdict={'size': 16, 'color': 'blue'})
# 前两个参数是相对于坐标轴的位置
# 中间是注释内容,因为携带希腊字母,用$$形式包围,中间的空格用'\'代替
# 最后是对注释内容的外观设置
plt.show()
- 如图:
四、调整轴标签的透明度
- 有时绘制的图会遮挡轴标签或轴标签遮挡线段图形,可以通过设置透明度解决
labels.set_fontsize()
:设置标签大小labels.set_bbox({})
:设置标签形状- facecolor设置前景色,edgecolor设置边框,alpha设置透明度
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-3, 3, 50)
y = 0.1 * x
plt.figure()
plt.plot(x, y, lw=10, zorder=1) # zorder在z轴方向排序,设置为1后不会遮挡坐标轴
plt.ylim(-2, 2)
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('data', 0))
# 调整被遮挡的轴标签透明度
for labels in ax.get_xticklabels() + ax.get_yticklabels():
labels.set_fontsize = 12 # 重新调节字体大小
labels.set_bbox(dict(facecolor='white', edgecolor='none', alpha=0.7)) # 透明度有关参数
plt.show()
- 如图:
五、子图
1.多个子图
- 首先设置一个画布/窗口,再对窗口划分
fig = plt.figure()
fig.add_subplot(a, b, c)
:将窗口划分成a×b的形状,当前是第c幅图
plot.hist()
:绘制直方图figure, axes = plt.subplots(a, b, sharex=True, sharey=True)
:直接划分子图,图是否共享坐标轴。
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure() # 创建一个空白图像
# 将该图像划分为2×2个子图
ax1 = fig.add_subplot(2, 2, 1) # 将第一个子图命名为ax1
ax2 = fig.add_subplot(2, 2, 2)
ax3 = fig.add_subplot(2, 2, 3)
plt.plot(np.random.randn(100).cumsum(), 'k--') # 不指定子图则默认在最后一个子图上plot
ax1.hist(np.random.randn(500), color='k', alpha=0.3, bins=20) # 直方图
# alpha--透明度,k为黑色,bins为直方的数量
ax2.scatter(np.arange(30), np.arange(30) + 2 * np.random.randn(30))
plt.show()
# 另一种方式划分子图
figure, axes = plt.subplots(2, 2, sharex=True, sharey=True)
- 如图,
2.绘制不同形状的子图
plt.GridSpec()
与plt.subplot(grid[])
先设置m行n列的子图,然后通过grid选择某几个子图合并为一个子图显示
grid = plt.GridSpec(2, 3, wspace=0.4, hspace=0.3)
plt.subplot(grid[0, 0])
plt.subplot(grid[0, 1:])
plt.subplot(grid[1, :2])
plt.subplot(grid[1, 2]);
如图,
六、图形
.add_patch()
:添加图形plt.Rectangle()
:长方形,plt.Circle
:圆形,plt.Polygon
:三角- alpha参数:透明度
- 长方形位置参数是起始点,长和宽
- 圆形位置参数是中心点,半径
- 三角形位置参数是三个角的位置
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
rect = plt.Rectangle((0.2, 0.75), 0.4, 0.15, color='k', alpha=0.3)
circ = plt.Circle((0.7, 0.2), 0.15, color='b', alpha=0.3)
pgon = plt.Polygon([[0.15, 0.15], [0.35, 0.4], [0.2, 0.6]],
color='g', alpha=0.5)
ax.add_patch(rect)
ax.add_patch(circ)
ax.add_patch(pgon)
plt.show()
- 如图,
七、保存图形
plt.savefit(path,dpi,bbox_inches)
- 根据后缀可以保持成多种形式的文件
- dpi参数:控制每英寸长度上的分辨率
- bbox_inches, 能删除figure周围的空白部分
plt.savefig('figpath.png', dpi=400, bbox_inches='tight')
八、各种图
1.折线图与散点图
plt.plot(x,y)
:线图plt.scatter(x,y)
:散点图
2.直方图与柱状图
plt.bar(x,y)
:柱状图plt.barh(x,y)
:水平柱状图plt.hist(x,y,bins, density=True,alpha)
:直方图- bins参数设置长方形个数(区间个数)
- density参数设置为频率分布
- alpha参数设置为透明度
3.显示色阶
plt.imshow(data,cmap=‘ ’)
:显示图片- cmap参数可以改变配色,如gray:黑-白,jet:蓝青黄红等
- cmap=plt.cm.get_cmap(‘Blues’, 6),也可以指定色阶的数量
plt.colorbar()
:显示色阶plt.clim(a,b)
:选定色阶显示的范围[a,b]- 如图,上图是不指定色阶数量,cmap=‘pink’;下图指定6个色阶,cmap=‘blues’
4.三维图像
from mpl_toolkits import mplot3d
:导入库plt.axes(projection='3d')
:设置投射方式ax.plot3D(xline, yline, zline)
:需要输入三维数据
from mpl_toolkits import mplot3d
fig = plt.figure()
ax = plt.axes(projection='3d')
zline = np.linspace(0, 15, 1000)
xline = np.sin(zline)
yline = np.cos(zline)
ax.plot3D(xline, yline, zline)
- 如图,
九、各种图的辅助标注
1.参考线
plt.grid()
:网格线plt.axhline(y=0.8, ls='--', c='r')
:水平参考线- 如图:
2.参考区域
plt.axvspan(xmin, xmax, facecolor, alpha)
:垂直x轴plt.axhspan(ymin, ymax, facecolor, alpha)
: 垂直y轴- 如图: