我在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()
Run Code Online (Sandbox Code Playgroud)
注意x和y标签如何与刻度相冲突.我可以优雅地解决这个问题吗?
Pau*_*aul 37
我分享你的沮丧.我工作了半个小时,无处可去.文档说set_xlabel采用arg 标签,但是我得到一个错误(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()
Run Code Online (Sandbox Code Playgroud)

Ada*_*hes 21
在新版本的matplotlib中,这是如何做到的:
ax.xaxis._axinfo['label']['space_factor'] = 2.8
Run Code Online (Sandbox Code Playgroud)
请参阅此处的说明:
https://github.com/matplotlib/matplotlib/issues/3610
在v1.4上测试,应该在版本> 1.1中工作我相信.
小智 17
我真的需要更频繁地关注StackOverflow.我是mplot3d的当前维护者.通常在常规2d图中工作的各种技巧不适用于3d图的原因是因为mplot3d最初是用硬编码的默认值编写的.mplot3d如何计算渲染标签的角度也存在缺陷.
v1.1.0包含几个修改以改善事物状态的修复程序.我修正了轴标签角度的错误计算,并对间距进行了一些调整.对于下一个版本,我希望让3d轴占用超过默认的轴间距,因为默认设计是考虑到刻度标签和轴标签在轴外,mplot3d不是这种情况. .由于间距由mplot3d中的相对比例决定,因此在较小的空间内工作会迫使标签靠得更近.
至于其他可能的解决方法,请参阅此处的说明.一个公平的警告,这个私人字典不是一个永久的解决方案,而是一个必要的邪恶,直到mplot3d的重构完成.
此外,v1.1.0包含对mplot3d的api的许多更新.请在此处查看修订后的文档.
TNT*_*TNT 12
为每个轴添加此项,调整数量:
axes.yaxis.labelpad=30
Run Code Online (Sandbox Code Playgroud)
Adam Hughes在链接中提到它不起作用,但它适用于我.
这会在一次拍摄中更改所有(x,y,z)标签的填充.我最喜欢这种方法:
from matplotlib import rcParams
rcParams['axes.labelpad'] = 20
Run Code Online (Sandbox Code Playgroud)