matplotlib画图(基础)

基本使用

基本格式

1
2
3
4
5
6
7
8
9
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1, 1, 50)
y = 2*x + 1

plt.figure(num=3, figsize=(8, 5),)
plt.plot(x, y)
plt.show()
  • np.linspace:定义x:范围是(-1,1);个数是50. 仿真一维数据组(x ,y)表示曲线1.
  • plt.figure:定义一个图像窗口,小窗口里面还可以有更多的小图片。这里定义一个图像窗口:编号为3;大小为(8, 5)
  • plt.plot:画(x ,y)曲线.
  • plt.show:显示图像. mark ### 基础设置 #### 图像坐标轴设置

    1
    2
    3
    4
    5
    plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')
    plt.xlim((-1, 2))
    plt.ylim((-2, 3))
    plt.xlabel('I am x')
    plt.ylabel('I am y')

  • plot中对图像进行设置,如color(颜色),linewidth(行宽),linestyle(曲线的类型)
  • xlim:x坐标轴范围
  • ylim:y坐标轴范围
  • xlabel:x坐标轴名称
  • ylabel:y坐标轴名称

    1
    2
    3
    new_ticks = np.linspace(-1, 2, 5)
    plt.xticks(new_ticks)
    plt.yticks([-2, -1.8, -1, 1.22, 3],[r'$really\ bad$', r'$bad$', r'$normal$', r'$good$', r'$really\ good$'])

  • xticks:设置x轴刻度
  • yticks:设置y轴刻度以及名称:刻度为[-2, -1.8, -1, 1.22, 3];对应刻度的名称为[‘really bad’,’bad’,’normal’,’good’, ‘really good’]. mark

图像边框

1
2
3
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
  • gca:获取当前坐标轴信息.
  • spines:设置边框
  • set_color:设置边框颜色:默认白色; mark

改变坐标轴的位置

1
2
ax.xaxis.set_ticks_position('bottom')  # 设置x坐标刻度数字或名称的位置
ax.spines['bottom'].set_position(('data', 0)) # 设置边框位置:x=0/y=0的位置
  • xaxis.set_ticks_position:设置x坐标刻度数字或名称的位置
  • bottom.(所有位置:top,bottom,both,default,none),默认是bottom
  • spines:设置边框:x轴;
  • set_position:设置边框位置:x=0/y=0的位置;(位置所有属性:outward,axes,data)
  • ('data', 0):标识0的位置,让x和y轴的位置移动到此 mark
    1
    2
    ax.yaxis.set_ticks_position('left')
    ax.spines['left'].set_position(('data',0))
mark

mark

Legend 图例

基本配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3, 3, 50)
y1 = 2*x + 1
y2 = x**2

plt.figure()

plt.xlim((-1, 2))
plt.ylim((-2, 3))

new_ticks = np.linspace(-1, 2, 5)
plt.xticks(new_ticks)
plt.yticks([-2, -1.8, -1, 1.22, 3],[r'$really\ bad$', r'$bad$', r'$normal$', r'$good$', r'$really\ good$'])

绘制图例

1
2
3
l1, = plt.plot(x, y1, label='linear line')
l2, = plt.plot(x, y2, color='red', linewidth=1.0, linestyle='--', label='square line')
plt.legend(loc='upper right')
  • label:图例名称
  • loc='upper right':表示图例将添加在图中的右上角. mark

调整label

重新设置了线条对应的 label

1
plt.legend(handles=[l1, l2], labels=['up', 'down'],  loc='best')

  • handles=[l1, l2]:指上面代码中的l1, l2,(要以逗号结尾,因为plt.plot()返回的是一个列表.)
  • best:表示自动分配最佳位置 mark

ioc参数

1
2
3
4
5
6
7
8
9
10
11
'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,

Annotation 标注

绘制图像基本信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3, 3, 50)
y = 2*x + 1

plt.figure(num=1, 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') # 设置x坐标刻度数字或名称的位置
ax.spines['bottom'].set_position(('data', 0)) # 设置边框位置:x=0/y=0的位置
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))

# 画一条垂直于x轴的虚线.
x0 = 1
y0 = 2*x0 + 1
plt.plot([x0, x0,], [0, y0,], 'k--', linewidth=2.5)
# 设置点的类型
plt.scatter([x0, ], [y0, ], s=50, color='b')

添加注释 annotate

1
2
3
plt.annotate(r'$2x+1=%s$' % y0, xy=(x0, y0), xycoords='data', xytext=(+30, -30),
textcoords='offset points', fontsize=16,
arrowprops=dict(arrowstyle='->', connectionstyle="arc3,rad=.2"))
  • xycoords='data':基于数据的值来选位置
  • xytext=(+30, -30): xy 的偏差值
  • textcoords='offset points:对于标注位置的描述
  • arrowprops:对图中箭头类型的一些设置 mark

添加注释 text

1
2
plt.text(-3.7, 3, r'$This\ is\ the\ some\ text. \mu\ \sigma_i\ \alpha_t$',
fontdict={'size': 16, 'color': 'r'})
  • -3.7, 3,是选取text的位置
  • 空格需要用到转字符\
  • fontdict设置文本字体 mark

tick 能见度(透明度)

绘制图像基本信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3, 3, 50)
y = 0.1*x

plt.figure()
# 在 plt 2.0.2 或更高的版本中, 设置 zorder 给 plot 在 z 轴方向排序
plt.plot(x, y, linewidth=10, zorder=1)
plt.ylim(-2, 2)
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))

mark

mark

调整坐标

对被遮挡的图像调节相关透明度,本例中设置 x轴 和 y轴 的刻度数字进行透明度设置

1
2
3
4
for label in ax.get_xticklabels() + ax.get_yticklabels():
label.set_fontsize(12)
# 在 plt 2.0.2 或更高的版本中, 设置 zorder 给 plot 在 z 轴方向排序
label.set_bbox(dict(facecolor='white', edgecolor='None', alpha=0.7, zorder=2))

  • zorder:图层的显示顺序
  • set_fontsize(12):重新调节字体大小
  • set_bbox:设置目的内容的透明度相关参
  • facecolor调节 box 前景色,edgecolor 设置边框, 本处设置边框为无,alpha设置透明度 mark

参考