Python 同一图表matplotlib上的多个直方图,每个直方图对应一个x轴标签

Python 同一图表matplotlib上的多个直方图,每个直方图对应一个x轴标签,python,matplotlib,plot,Python,Matplotlib,Plot,我试图绘制一张图表,显示不同年龄组的男性和女性在某项活动中的不同行为 因此,如果年龄组为:['1-10'、'11-20'、'21-30'…] 我想为每个年龄组(每个年龄段都是x轴上的一个标签)绘制一个柱状图,供从事该活动的男性和女性使用。我知道如何在一个图形中同时绘制两个直方图,但我不知道如何并行绘制多个直方图,尤其是当每个直方图都是针对给定的x标签时 有人能帮忙吗?我不确定您是否希望两个直方图都在一个绘图中,但如果我生成一些随机数据: import numpy as np import mat

我试图绘制一张图表,显示不同年龄组的男性和女性在某项活动中的不同行为

因此,如果年龄组为:['1-10'、'11-20'、'21-30'…] 我想为每个年龄组(每个年龄段都是x轴上的一个标签)绘制一个柱状图,供从事该活动的男性和女性使用。我知道如何在一个图形中同时绘制两个直方图,但我不知道如何并行绘制多个直方图,尤其是当每个直方图都是针对给定的x标签时


有人能帮忙吗?

我不确定您是否希望两个直方图都在一个绘图中,但如果我生成一些随机数据:

import numpy as np
import matplotlib.pyplot as plt
age = ['{}-{}'.format(i*10, (i+1)*10) for i in range(10)]
males = np.random.randint(0,100,10)
females = np.random.randint(0,100,10)
如果需要从某些数据手动创建柱状图,可以使用
numpy
而不是matplotlib柱状图(将插入
plt.hist()
的是
male_数据
female_数据
):

然后将其绘制为
bar
plot(我从中改编了部分内容),我得到的可能是您想要的:

fig, ax = plt.subplots()
# Normalize the counts by dividing it by the sum:
ax.bar(np.arange(10)-0.15, males/np.sum(males), width=0.1, color='b', label='male')
ax.bar(np.arange(10)+0.05, females/np.sum(females), width=0.1, color='r', label='female')
ax.set_xticks(np.arange(10))
ax.set_xticklabels(age)
ax.legend()
ax.set_xlim(-0.5,9.5)
plt.show()

还是要用y轴分隔绘图

fig, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
ax1.bar(np.arange(10)-0.3, 100*males/np.sum(males), width=0.6, color='b', label='male')
ax2.bar(np.arange(10)-0.3, 100*females/np.sum(females), width=0.6, color='r', label='female')
for i in (ax1, ax2):
    getattr(i, 'set_xticks')(np.arange(10))
    getattr(i, 'set_xticklabels')(age)
    getattr(i, 'set_xlabel')('Age range')
    getattr(i, 'set_ylabel')('People doing it (in percent)')
    getattr(i, 'set_xlim')(-0.5,9.5)
plt.show()


在第二个示例中,您可能需要减小文本大小,以便正确显示年龄范围…

谢谢您的回答。我理解条形图,它的柱状图困扰着我,因为它需要为每个年龄组的每个性别设置许多箱子。是的,y轴将被共享。我想我应该分别使用每个年龄组的带有直方图的子图,并将其显示在一个图表中。我不太理解它。问题是您不知道如何找到直方图的值?还是别的什么?你能给我一个情节,它到底是什么样子的吗?因为如果这个答案不能回答你的问题,我可能需要猜猜你在找什么-(
fig, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
ax1.bar(np.arange(10)-0.3, 100*males/np.sum(males), width=0.6, color='b', label='male')
ax2.bar(np.arange(10)-0.3, 100*females/np.sum(females), width=0.6, color='r', label='female')
for i in (ax1, ax2):
    getattr(i, 'set_xticks')(np.arange(10))
    getattr(i, 'set_xticklabels')(age)
    getattr(i, 'set_xlabel')('Age range')
    getattr(i, 'set_ylabel')('People doing it (in percent)')
    getattr(i, 'set_xlim')(-0.5,9.5)
plt.show()