Matplotlib基础(杂):边框spines及刻度ticks/labels属性设置及隐藏

绘制图形的时候,有时候绘制草图或者绘制多轴时,需要根据隐藏边框、刻度及标签,或者设置它们的属性,如颜色、尺寸等等。此外,补充了XY轴交点——坐标原点的调整。

单图案例

隐藏或不显示

模块及测试数据

1
2
3
4
5
6
7
8
9
10
11
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams['figure.dpi'] = 120
mpl.rcParams['font.size']=10.5
cm = 1/2.54

# x[0,2pi],400个点,y=sin(x^2)
x = np.linspace(0, 2 * np.pi, 400)
y = np.sin(x ** 2)
y2 = np.sin(x)

隐藏部件spines及ticks及tickslabels,根据参数要求传入空的列表或者空字符串即可

1
2
3
4
5
6
7
8
9
ax.spines[['top', 'right']].set_visible(False)
ax.spines[:].set_visible(False) # 设置四根轴全部不可见
ax.set_xticks([])
ax.set_yticks([])
ax.set_xticklabels([])
ax.set_yticklabels([])
ax.set_xlabel('')
ax.set_ylabel('')
ax.set_title('')

设置属性,由于多图的时候会出现叠盖,可以设置zoder属性或者分别设置,这里两张图,分别设置即可,关于label中的文本样式均可以参考text的参数进行调节

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
fig, ax = plt.subplots(figsize=(12*cm,8*cm), facecolor='w',constrained_layout=True)
ax.plot(x, y,c='b')
ax.spines['left'].set_linewidth(1)
ax.spines[['top', 'right']].set_visible(False)
ax.spines[['left']].set_color(c="g")
ax.spines[['bottom']].set_color(c="b")
# ticks,pad代表与轴的距离
ax.tick_params(axis='x', direction='out', length=6, width=2, colors='b',
pad=12,labelcolor='y',labelsize=12,labelrotation=30)
ax.tick_params(axis='y', direction='in', length=4, width=1, colors='orange',
labelcolor='b',labelsize=8)
# 单位注释等,label
ax.set_ylabel("y1")
ax.set_title('A single plot')
# 另一张重叠的图
ax2 = ax.twinx()
ax2.plot(x, y2,c='r')
ax2.spines[['right']].set_color(c="m")
ax2.spines[['top','left','bottom']].set_visible(False)
ax2.set_ylabel("y2",labelpad=5,c = 'm',rotation='horizontal')

fig.savefig("./spines_ticks.png",dpi=300,bbox_inches='tight',pad_inches=0.2)

调整坐标原点

通常我们会隐藏右侧和顶部的框线绘制==笛卡尔坐标系==:

1
2
3
4
5
6
7
8
9
10
11
# 绘图
fig, ax = plt.subplots()
pt = ax.scatter(x = range(10), y=[5,6,8,7,9,1,4,12,5,6], alpha=0.8,color='b' )
# 更改坐标点
ax.spines[['top', 'right']].set_visible(False)
ax.spines['left'].set_position(('data', 4))
ax.spines['bottom'].set_position(('data', 2))
# 添加注释
ax.set_xlabel("x")
ax.set_ylabel("y")
plt.show()

参考