首页 > 解决方案 > 如何为两个子图设置相等的刻度数?

问题描述

我有两个水平条的子图matplotlib。对于第一个子图,y 轴刻度数是合适的,但我无法弄清楚为什么为第二个子图指定刻度数是错误的。这是代码:

import matplotlib.pyplot as plt
import numpy as np

# Plot separate subplots for genders
fig, (axes1, axes2) = plt.subplots(nrows=1, ncols=2,
                                   sharex=False,
                                   sharey=False,
                                   figsize=(15,10))

labels = list(out.index)
x = ["20%", "40%", "60%", "80%", "100%"]
y = np.arange(len(out))
width = 0.5
axes1.barh(y, female_distr, width, color="olive",
        align="center", alpha=0.8)
axes1.ticks_params(nbins=6)
axes1.set_yticks(y)
axes1.set_yticklabels(labels)
axes1.set_xticklabels(x)
axes1.yaxis.grid(False)
axes1.set_xlabel("Occurence (%)")
axes1.set_ylabel("Language")
axes1.set_title("Language Distribution (Women)")

axes2.barh(y, male_distr, width, color="chocolate",
        align="center", alpha=0.8)
axes2.locator_params(nbins=6)
axes2.set_yticks(y)
axes2.set_yticklabels(labels)
axes2.set_xticklabels(x)
axes2.yaxis.grid(False)
axes2.set_xlabel("Occurence (%)")
axes2.set_ylabel("Language")
axes2.set_title("Language Distribution (Men)")

其余的对象out都是简单的数据框,我认为这里不需要描述。上面的代码返回以下图: 水平条 我希望第二个子图具有相同数量的刻度,但尝试nbins总是导致比第一个子图更多或更少的刻度。

标签: pythonmatplotlib

解决方案


首先,如果您希望您的两个图具有相同的 x 轴,为什么不使用sharex=True?

x_ticks = [0,20,40,60,80,100]

fig, (ax1,ax2) = plt.subplots(1,2, sharex=True)
ax1.set_xticks(x_ticks)
ax1.set_xticklabels(['{:.0f}%'.format(x) for x in x_ticks])
ax1.set_xlim(0,100)
ax1.grid(True, axis='x')
ax2.grid(True, axis='x')

在此处输入图像描述


推荐阅读