调整Axes3D标签位置
我在使用matplotlib的时候遇到了一个问题,就是坐标轴的标签和刻度标签重叠在一起了。我尝试过手动调整这些标签的位置,比如用变换或者调用set_y(),但是都没有成功。
下面是一个代码片段,可以复现这个问题:
import matplotlib
matplotlib.use("TKAGG")
import matplotlib.pyplot as pyplot
import mpl_toolkits.mplot3d
figure = pyplot.figure()
figure.subplots_adjust(bottom=0.25, top=0.75)
axes = figure.gca(projection='3d')
xLabel = axes.set_xlabel('XXX xxxxxx xxxx x xx x')
yLabel = axes.set_ylabel('YY (y) yyyyyy')
zLabel = axes.set_zlabel('Z zzzz zzz (z)')
plot = axes.plot([1,2,3],[1,2,3])
pyplot.show()
你可以注意到,x轴和y轴的标签和刻度标签是冲突在一起的。我能否优雅地解决这个问题呢?
8 个回答
22
在新的matplotlib版本中,操作方法是这样的:
ax.xaxis._axinfo['label']['space_factor'] = 2.8
这里有详细的解释:
https://github.com/matplotlib/matplotlib/issues/3610
在v1.4版本上测试过,应该在1.1以上的版本也能用。
25
对每个轴添加这个,调整数字:
axes.yaxis.labelpad=30
在Adam Hughes的链接中提到这不管用,但对我来说是有效的。
55
我理解你的沮丧。我花了半个小时在这个问题上,但始终没有找到解决办法。文档上说 set_xlabel 这个函数可以接受一个叫做 labelpad 的参数,但我却遇到了错误(AttributeError: Unknown property labelpad)!在设置之后,无论是在 xaxis 还是 w_xaxis 上都没有任何效果。
这里有个简单的解决办法:
import matplotlib
matplotlib.use("TKAGG")
import matplotlib.pyplot as pyplot
import mpl_toolkits.mplot3d
figure = pyplot.figure(figsize=(8,4), facecolor='w')
ax = figure.gca(projection='3d')
xLabel = ax.set_xlabel('\nXXX xxxxxx xxxx x xx x', linespacing=3.2)
yLabel = ax.set_ylabel('\nYY (y) yyyyyy', linespacing=3.1)
zLabel = ax.set_zlabel('\nZ zzzz zzz (z)', linespacing=3.4)
plot = ax.plot([1,2,3],[1,2,3])
ax.dist = 10
pyplot.show()