参考来源:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.axis.html
心血来潮,想用matplotlib画一下faster-rcnn中生成的基础anchors,如下,
base_anchors = [[ -84.,-40., 99., 55.],
[-176.,-88.,191.,103.],
[-360. -184.,375.,199.],
[ -56.,-56., 71., 71.],
[-120. -120.,135.,135.],
[-248. -248.,263.,263.],
[ -36.,-80., 51., 95.],
[ -80. -168., 95.,183.],
[-168. -344.,183.,359.]]
本来觉得应该很简单,但是始终画不出来...坐标轴范围始终是0-1...
死磕之下终于攻破...主要是axis参数设置问题,这里简单讲解一下其使用方法,避免再入坑...
xmin, xmax, ymin, ymax = axis()
xmin, xmax, ymin, ymax = axis(xmin, xmax, ymin, ymax)
xmin, xmax, ymin, ymax = axis(option)
xmin, xmax, ymin, ymax = axis(**kwargs)
xmin, xmax, ymin, ymax = axis(str)
xmin, ymin, xmax, ymax | 坐标轴的最大最小值 | |
str | ‘on’ | 显示坐标轴 |
‘off’ | 隐藏坐标轴 | |
'equal' | 调整坐标轴进行缩放 | |
‘scaled’ | 调整画布长宽进行缩放 | |
'tight' | 设置坐标轴取值恰好满足数据取值范围 | |
'auto' | 自动调整刻度 | |
‘image’ | 'scaled' with axis limits equal to data limits.(感觉和auto,tight差不多,不知道怎么翻译...) | |
'square' | 与scale类似,但要求xmax-xmin = ymax-ymin |
# -*- coding:utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches
#a的每一行为一个anchor
#四个值分别为矩形对角线两顶点坐标
base_anchors = [[ -84.,-40., 99., 55.],
[-176.,-88.,191.,103.],
[-360. -184.,375.,199.],
[ -56.,-56., 71., 71.],
[-120. -120.,135.,135.],
[-248. -248.,263.,263.],
[ -36.,-80., 51., 95.],
[ -80. -168., 95.,183.],
[-168. -344.,183.,359.]]
fig = plt.figure()
axes = fig.add_subplot(111)
for i in range(9):
p = a[i]
rec = patches.Rectangle((p[0], p[1]),p[2]-p[0], p[3]-p[1], fill=False, linewidth=1, edgecolor='r', facecolor='none')
axes.add_patch(rec)
#axes.axis('equal')
#axes.axis('scaled')
#axes.axis('tight')
#axes.axis('auto')
#plt.title('Base anchors')
'''
plt.xlim、plt.ylim 设置横纵坐标轴范围
plt.xlabel、plt.ylabel 设置坐标轴名称
plt.xticks、plt.yticks设置坐标轴刻度
'''
#plt.xlim(-600, 600)
#plt.ylim(-600, 600)
plt.show()
str参数效果(不设置时,坐标轴始终为0-1.0),从左到右边分别为equal,scaled, tight, auto
上图scaled参数的效果明显与其它三种不同,它会自动将画布缩放为正方形。
equal和scaled区别在改变窗口大小时候区别更加明显,如下。