如何在子图中设置xticks

122
如果我绘制一个单独的imshow图,我可以使用
fig, ax = plt.subplots()
ax.imshow(data)
plt.xticks( [4, 14, 24],  [5, 15, 25] )

替换我的x轴标签。

现在,我正在使用imshow绘制12个图。

f, axarr = plt.subplots(4, 3)
axarr[i, j].imshow(data)

我如何仅更改其中一个子图的xticks? 我只能使用 axarr[i, j] 访问子图的轴。 如何仅访问一个特定子图的 plt

2个回答

214

有两种方式:

  1. 使用subplot对象的轴方法(例如,ax.set_xticksax.set_xticklabels
  2. 使用plt.sca来设置pyplot状态机(即plt接口)的当前轴。

以下是一个示例(还演示了如何使用setp更改所有子图的属性):

import matplotlib.pyplot as plt

fig, axes = plt.subplots(nrows=3, ncols=4)

# Set the ticks and ticklabels for all axes
plt.setp(axes, xticks=[0.1, 0.5, 0.9], xticklabels=['a', 'b', 'c'],
        yticks=[1, 2, 3])

# Use the pyplot interface to change just one subplot...
plt.sca(axes[1, 1])
plt.xticks(range(3), ['A', 'Big', 'Cat'], color='red')

fig.tight_layout()
plt.show()

在此输入图片描述


你使用的是哪个版本?我在 plt.setp(ax, xtickslabels=xticks) 中遇到了 AttributeError: Unknown property xtickslabels - Frederick Nord

49

请参见matplotlib仓库上最近的回答,其中提出了以下解决方案:

  • 如果您想要设置xticklabels:

ax.set_xticks([1,4,5]) 
ax.set_xticklabels([1,4,5], fontsize=12)
  • 如果您只想增加xticklabels的字体大小,并使用默认值和位置(这是我个人经常需要并且非常方便的内容):

  • ax.tick_params(axis="x", labelsize=12) 
    
  • 要一次性完成所有事情:

    plt.setp(ax.get_xticklabels(), fontsize=12, fontweight="bold", 
             horizontalalignment="left")`
    

  • 网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接