python - 调整 matplotlib 中 xticklabel 的位置对 x 方向没有影响

标签 python matplotlib

在 Python 3.6.5 中使用 matplotlib 2.2.2 和 gridspec,我为一篇包含多个子图的研究论文创建了一个巨大的图。轴对象存储在名为axes的字典中。该字典被传递给函数 adjust_xticklabels(),该函数应该将每个子图中的第一个 xticklabel 稍微向右对齐,最后一个 xticklabel 稍微向左对齐,这样相邻图的 xticklabel 就不会对齐互相妨碍。该函数定义为:

def adjust_xticklabels(axes, rate = 0.1):

    for ax in axes.values():
        left, right = ax.get_xlim()                  # get boundaries
        dist = right-left                            # get distance
        xtl = ax.get_xticklabels()
        if len(xtl) > 1:
            xtl[0].set_position((left + rate*dist, 0.))   # (x, y), shift right
            xtl[-1].set_position((right - rate*dist, 0.)) # shift left

调用它没有任何效果。当然我也尝试过用高得离谱的值。但是,它在 y 方向上有影响,例如设置 xtl[0].set_position((0.3, 0.3)) 的情况。

简单的复制:

ax = plt.subplot(111)
ax.plot(np.arange(10))
xtl = ax.get_xticklabels()
xtl[4].set_position((0.3, 0.3)) # wlog, 4 corresponds to 6

No effect in x-direction, despite specifying position as xy = (0.3, 0.3)

我花了很长时间试图弄清楚这是一个功能还是一个错误。我错过了什么还是这是一个错误?还有其他方法可以做同样的事情吗?

最佳答案

这是一个功能,没有错误。刻度标签在绘制时根据使用的股票行情指示器定位在正确的位置。这可确保标签始终位于相应刻度所在的位置。如果更改限制、移动或缩放绘图,标签将始终遵循这些更改。

您通常不打算更改此位置,但您可以通过向其添加自定义转换来更改。这在 Moving matplotlib xticklabels by pixel value 。总体思路是在标签上设置翻译转换。例如。将第二个标签向右平移 20 像素,

import matplotlib.transforms as mtrans
# ...
trans = mtrans.Affine2D().translate(20, 0)
label = ax.get_xticklabels()[1]
label.set_transform(label.get_transform()+trans)

关于python - 调整 matplotlib 中 xticklabel 的位置对 x 方向没有影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50401224/

相关文章:

python - 在seaborn tsplot中将图例移到图外

matlab - 在 matlab 中像 matplotlib imshow 一样在 imagesc\imshow 的像素之间进行平滑处理

python - 如何在 OpenCV 中读取 .tif 图像

python - 使用 pyodbc 创建 Python 模块

python - emailmultialternatives 在 django 中附加文件和 html 内容

python - 如何增加子图文本大小并添加自定义条形图注释

python - imshow 和 cartopy 中的图像交叉日期线问题

python - 从两个不等长的 numpy 数组中选择元素

python - 构建 python 项目的非常*简单*的方法是什么?

python - 类型错误:必须使用 Interface 实例作为第一个参数来调用未绑定(bind)方法 getInterfaceName()(什么也没有)