AxesSubplot对象的xticks等效函数

79 投票
2 回答
90705 浏览
提问于 2025-04-17 07:43

我正在尝试使用Axes对象来控制我的matplotlib图形。我没有使用plt(也就是import matplotlib.pyplot as plt),因为我想把图嵌入到我的tkinter图形用户界面中,具体可以参考这个链接

不过,我在图形中也使用了子图,所以像这样:

a = f.add_subplot(121)
a2 = f.add_subplot(122)
a.plot(fn2,mag)
a2.bar(range(0,10), magBin, width)

这都没问题,我可以用axes的属性来控制一些东西(比如这个中的代码中的a.axesMethod()),但我想为我的条形图添加字符串标签。

我的困扰是,我不能使用

plt.xticks(ind+width, ('G1', 'G2', 'G3', 'G4', 'G5') )

像示例中那样,因为如果我想把图嵌入到我的Tkinter GUI中,就不能使用plt。我只能在Axes对象的限制下进行操作。我尝试使用a2.set_xticks,但这并不能满足我在条形图中需要的字符串作为刻度的功能。

2 个回答

2

你也可以使用 set() 这个方法:

ax.set(xticks=ticks, xticklabels=labels)

有两点需要注意:第一,len(ticks)==len(labels) 这个条件必须成立,也就是说 ticks 和 labels 的数量要一样;第二,为了让 x 轴的刻度分布得更均匀,可以用 ax.get_xlim() 来获取 x 轴的范围,然后根据这个范围创建一个值的范围,从开始到结束。这样一个有效的例子可以是:

f, ax = plt.subplots()
ax.plot([10, 20, 30, 40, 50], [1, 2.8, 3, 3.1, 5])
ax.get_xlim()  # (8.0, 52.0)
ax.set(xticks=range(8, 53, 10), xticklabels=['a', 'b', 'c', 'd', 'e'], yticks=range(1, 6), yticklabels=range(1, 6));

res

122

你可以用下面的方式来替代:

axes.set_xticks(ticks, minor=False)

还有

axes.set_xticklabels(labels, fontdict=None, minor=False)

撰写回答