我试图绘制一张图表,显示不同年龄组的男性和女性对某项活动的不同行为。
所以,如果年龄组是:[' 1-10',' 11-20',' 21-30' ...] 我希望a为每个年龄组(每个年龄范围都是x轴上的标签)绘制直方图,对于进行该活动的男性和女性。我知道如何在一个图中将两个直方图一起绘制,但我不知道如何并行绘制多个直方图,特别是当每个直方图用于给定的x标签时。
有人可以帮忙吗?
答案 0 :(得分:1)
我不确定你是否想在一个图中同时使用两个直方图,但如果我生成一些随机数据:
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直方图(male_data
和female_data
就是您要插入的plt.hist()
}):
bins = [i*10 for i in range(11)] # = [0,10,20,30,40,50,60,70,80,90,100]
males , _ = np.histogram(male_data, bins=bins)
females , _ = np.histogram(female_data, bins=bins)
然后将其绘制为bar
图(我已经从matplotlib examples page改编了一些)我得到的东西可能是你想要的东西:
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()
在第二个示例中,您可能需要减小文本大小,以便正确显示年龄范围...