【问题标题】:Overlapping y-axis tick label and x-axis tick label in matplotlib在 matplotlib 中重叠 y 轴刻度标签和 x 轴刻度标签
【发布时间】:2012-03-14 10:06:42
【问题描述】:

如果我使用以下代码使用 matplotlib 创建绘图:

import numpy as np
from matplotlib import pyplot as plt
xx = np.arange(0,5, .5)
yy = np.random.random( len(xx) )
plt.plot(xx,yy)
plt.imshow()

我得到一个看起来像附加图像的结果。问题是 最底部的 y 刻度标签与最左侧的 x 刻度标签重叠。这 看起来不专业。我想知道是否有自动 删除最底部的 y-tick 标签的方法,所以我没有 重叠问题。代码行数越少越好。

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    在ticker模块中有一个名为MaxNLocator的类,它可以采用prune kwarg。
    使用它可以删除第一个刻度:

    import matplotlib.pyplot as plt
    from matplotlib.ticker import MaxNLocator
    import numpy as np
    xx = np.arange(0,5, .5)
    yy = np.random.random( len(xx) )
    plt.plot(xx,yy)
    plt.gca().xaxis.set_major_locator(MaxNLocator(prune='lower'))
    plt.show()
    

    结果:

    【讨论】:

      【解决方案2】:

      您可以在 x 轴上填充刻度:

      ax.tick_params(axis='x', pad=15)
      

      如果您尚未为当前图形存储变量 ax,请将 ax 替换为 plt.gca()

      您还可以删除 axis 参数来填充两个轴。

      【讨论】:

      • 看起来很优雅,但不幸的是似乎不适用于 3D 绘图,例如plot_surface
      【解决方案3】:

      解决重叠问题的一种非常优雅的方法是增加 x 和 y 刻度标签的填充(即到轴的距离)。可能并不总是需要保留大多数标签的角落。在我看来,一般来说,如果标签离轴比默认配置稍微远一点,看起来会很好。

      可以通过 matplotlibrc 文件或使用命令在绘图脚本中更改填充

      import matplotlib as mpl
      
      mpl.rcParams['xtick.major.pad'] = 8
      mpl.rcParams['ytick.major.pad'] = 8
      

      大多数时候,6 的填充也足够了。

      【讨论】:

        【解决方案4】:

        这个回答详细here。基本上,你使用这样的东西:

        plt.xticks([list of tick locations], [list of tick lables])
        

        【讨论】: