matploylib库的使用

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()
  • 如图所示:
    1
     
     

二、移动坐标轴

  • 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()
  • 如图:
    2
     
     

三、标注

  • .scatter(x,y):散点图
  • plt.annotate():在图中添加注释
    • xycoords='data':基于数据的值来选位置
    • xytext=(+30, -30):与xy的偏差值,向右方偏离30,向下偏离30
    • textcoords='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()
  • 如图:
    3
     
     

四、调整轴标签的透明度

  • 有时绘制的图会遮挡轴标签或轴标签遮挡线段图形,可以通过设置透明度解决
  • 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()
  • 如图:
    4

 
 

五、子图

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)
  • 如图,
    5

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()
  • 如图,
    6
     
     

七、保存图形

  • 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轴
  • 如图:
    在这里插入图片描述
发布了60 篇原创文章 · 获赞 2 · 访问量 1486

猜你喜欢

转载自blog.csdn.net/qq_40160983/article/details/104230453