有人可以告诉我如何修改此使用matplotlib的Python代码,以便无论绘制多少分,条的宽度都将保持恒定吗?先感谢您!
# data to plot n_groups = len(math_scores) ###print "im here", math_scores,verbal_scores scores_readingwriting = verbal_scores scores_math = math_scores # create plot fig, ax = plot.subplots() index = np.arange(n_groups) bar_width = 0.35 opacity = 0.8 rects1 = plot.bar(index, scores_readingwriting, bar_width, alpha=opacity, color='black', label='R/W') rects2 = plot.bar(index + bar_width, scores_math, bar_width, alpha=opacity, color='grey', label='Math') plot.xlabel('Date',size='14') plot.ylabel('Scores',size='14') plot.title(str(first_names[i])+' '+str(last_names[i])+"'s History",size='17') num=len(scores) ###print datesofinterest plot.xticks(index + bar_width/2, datesofinterest,size='12') plot.yticks(size='12') axes = plot.gca() axes.set_ylim([200,800]) plot.legend() plot.tight_layout() fig.savefig('img'+str(student_ids[i])+'.png')
条的宽度相同!它们看起来不一样的原因是因为您正在使用以下行:
index = np.arange(n_groups)
这将更改您的x值,从而更改x轴的比例。为了抵消这种影响,您可以更改x轴的限制,也可以使条形宽度取决于分数的数量,例如,如果0.35的宽度适用于10个分数,那么如果将分数的数量加倍,条宽度的一半(反之亦然)。您可以看到更改轴限制或条宽度如何使条看起来相同的宽度:
import numpy as np import matplotlib.pyplot as plt # make some dummy data scores_reading = np.random.randint(50,100,10) scores_math = np.random.randint(50,100,10) fig = plt.figure(figsize=(16,5)) bar_width = 0.35 index = np.arange(10) ax1 = fig.add_subplot(1,4,1) ax1.bar(index, scores_reading, bar_width, fc='b', edgecolor='none') ax1.bar(index+bar_width, scores_math, bar_width, fc='r', edgecolor='none') ax1.set_xlim(0,10) ax1.set_title('Original - 10 scores') ax2 = fig.add_subplot(1,4,2) ax2.bar(index[:5], scores_reading[:5], bar_width, fc='b', edgecolor='none') ax2.bar(index[:5]+bar_width, scores_math[:5], bar_width, fc='r', edgecolor='none') ax2.set_title('Original - 5 scores') ax3 = fig.add_subplot(1,4,3) ax3.bar(index[:5], scores_reading[:5], bar_width, fc='b', edgecolor='none') ax3.bar(index[:5]+bar_width, scores_math[:5], bar_width, fc='r', edgecolor='none') ax3.set_xlim(0,10) ax3.set_title('Changed limit - 5 scores') ax4 = fig.add_subplot(1,4,4) ax4.bar(index[:5], scores_reading[:5], bar_width/2., fc='b', edgecolor='none') ax4.bar(index[:5]+bar_width, scores_math[:5], bar_width/2., fc='r', edgecolor='none') ax4.set_title('Changed width - 5 scores') fig.show()