在set_position(('outward', spine_offset))
中,偏移量以磅为单位测量(1/72英寸,类似于字体的测量方式,例如12磅字体).
using a distance in "axes coordinates"
除了'outward'
,你也可以使用'axes'
个坐标:0在底部(左),1在顶部(右).由于通常绘图不是正方形,为了获得视觉上的相等距离,您可以将x偏移转换为y偏移,同时考虑边界框的纵横比.
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
x_offset = 0.02
y_offset = x_offset / ax.get_window_extent().height * ax.get_window_extent().width
a = np.linspace(0, 2 * np.pi, 1000)
ax.plot(np.sin(5 * a), np.sin(6 * a))
ax.set_facecolor('lightsalmon') # set a color to visualize the offset
ax.spines.top.set_visible(False)
ax.spines.right.set_visible(False)
ax.spines.left.set_position(('axes', -x_offset))
ax.spines.bottom.set_position(('axes', -y_offset))
ax.plot(1, -y_offset, ">k", transform=ax.transAxes, clip_on=False)
ax.plot(-x_offset, 1, "^k", transform=ax.transAxes, clip_on=False)
plt.show()
Converting "points" to "axes coordinates"
或者,您可以将点转换为像素,然后从像素转换回轴坐标.一英寸有72个点,这个数字的dpi告诉我们一英寸有多少像素,
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
spine_offset_points = 5
spine_offset_pixels = fig.dpi * spine_offset_points / 72.0
x_offset, y_offset = ax.transAxes.inverted().transform((spine_offset_pixels, spine_offset_pixels)) \
- ax.transAxes.inverted().transform((0, 0))
a = np.linspace(0, 2 * np.pi, 1000)
ax.plot(np.sin(3 * a), np.sin(8 * a))
ax.set_facecolor('violet')
ax.spines.top.set_visible(False)
ax.spines.right.set_visible(False)
ax.spines.left.set_position(('outward', spine_offset_points))
ax.spines.bottom.set_position(('outward', spine_offset_points))
ax.plot(1, -y_offset, ">k", transform=ax.transAxes, clip_on=False)
ax.plot(-x_offset, 1, "^k", transform=ax.transAxes, clip_on=False)
plt.show()