我在使用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标签如何与刻度相冲突。我可以优雅地解决这个问题吗?
答案 0 :(得分:37)
我分享你的沮丧。我工作了半个小时,无处可去。文档说set_xlabel采用了一个arg 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()
答案 1 :(得分:20)
在matplotlib的新版本中,这是如何做到的:
ax.xaxis._axinfo['label']['space_factor'] = 2.8
请参阅此处的解释:
https://github.com/matplotlib/matplotlib/issues/3610
在v1.4上测试,应该在版本>中工作1.1我相信。
答案 2 :(得分:16)
我真的需要更频繁地关注StackOverflow。我是mplot3d的当前维护者。通常在常规2d图中工作的各种技巧不适用于3d图的原因是因为mplot3d最初是用硬编码的默认值编写的。 mplot3d如何计算渲染标签的角度也存在缺陷。
v1.1.0包含几个用于改善状态的修复程序。我修正了轴标签角度的错误计算,并对间距进行了一些调整。对于下一个版本,我希望让3d轴占用超过默认的轴间距,因为默认设计是考虑到刻度标签和轴标签在轴外,mplot3d不是这种情况。 。因为间距是由mplot3d中的相对比例决定的,所以在较小的空间内工作会迫使标签靠近在一起。
至于其他可行的解决方法,请参阅说明here。 一个公平的警告,这个私人字典不是一个永久的解决方案,而是一个必要的邪恶,直到mplot3d的重构完成。
此外,v1.1.0包含对mplot3d的api的许多更新。请查看修订后的文档here。
答案 3 :(得分:8)
为每个轴添加此项,修改数字:
axes.yaxis.labelpad=30
Adam Hughes在链接中提到它不起作用,但它适用于我。
答案 4 :(得分:5)
这会在一次拍摄中更改所有(x,y,z)标签的填充。我最喜欢这种方法:
from matplotlib import rcParams
rcParams['axes.labelpad'] = 20
答案 5 :(得分:3)
作为一种设计实践,转换后的文字不是很清晰。 我建议你为你的轴使用标签,也许是颜色编码。 这就是你在matplotlib中的表现方式
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('X', fontsize=14, fontweight='bold', color='b')
yLabel = axes.set_ylabel('Y',fontsize=14, fontweight='bold', color='r')
zLabel = axes.set_zlabel('Z',fontsize=14, fontweight='bold', color='g')
x = pyplot.Rectangle((0, 0), 0.1, 0.1,fc='b')
y = pyplot.Rectangle((0, 0), 0.1, 0.1,fc='r')
z = pyplot.Rectangle((0, 0), 0.1, 0.1,fc='g')
handles, labels = axes.get_legend_handles_labels()
axes.legend((x,y,z),("XXXXXX","YYYYY","ZZZZZZ"),'best')
plot = axes.plot([1,2,3],[1,2,3])
pyplot.show()
答案 6 :(得分:0)
绘制图形后,可以使用labelpad
:
axes = fig.gca(projection='3d')
axes.xaxis.labelpad=20
axes.yaxis.labelpad=20
axes.zaxis.labelpad=20
这可能会导致轴标签超出3D图,因此您必须使用dist
方法来调整距离:
ax.dist = 13