如何在Python中为每个柱状图创建独立绘图画布
解决方法
方案1:每个柱状图单独一个独立画布
每次绘制前调用plt.figure()创建新画布,这样每个柱状图会显示在单独窗口中:
# 绘制Running time柱状图 plt.figure() plt.bar(values, stats_list_running, width, label='Running time') plt.xlabel('Tests') plt.ylabel('Values') plt.title('Running time') plt.legend() plt.show() # 绘制No. of activations柱状图 plt.figure() plt.bar(values, stats_list_noofact, width, label='No. of activations') plt.xlabel('Tests') plt.ylabel('Values') plt.title('No. of activations') plt.legend() plt.show() # 绘制Avg. strength of activations柱状图 plt.figure() plt.bar(values, stats_list_avgstract, width, label='Avg. strength of activations') plt.xlabel('Tests') plt.ylabel('Values') plt.title('Avg. strength of activations') plt.legend() plt.show() # 绘制Avg. length of activations柱状图 plt.figure() plt.bar(values, stats_list_avglenact, width, label='Avg. length of activations') plt.xlabel('Tests') plt.ylabel('Values') plt.title('Avg. length of activations') plt.legend() plt.show() # 绘制Avg. time between activations柱状图 plt.figure() plt.bar(values, stats_list_avgtimbet, width, label='Avg. time between activations') plt.xlabel('Tests') plt.ylabel('Values') plt.title('Avg. time between activations') plt.legend() plt.show()
方案2:将所有柱状图放在同一个画布的子图中
如果想用subplot布局但之前操作错误,正确做法是先创建子图对象,再在对应子图上调用绘图方法:
# 创建1行5列的子图布局,fig为画布,axes为子图对象列表 fig, axes = plt.subplots(nrows=1, ncols=5, figsize=(20, 5)) # 第一个子图 axes[0].bar(values, stats_list_running, width, label='Running time') axes[0].set_xlabel('Tests') axes[0].set_ylabel('Values') axes[0].set_title('Running time') axes[0].legend() # 第二个子图 axes[1].bar(values, stats_list_noofact, width, label='No. of activations') axes[1].set_xlabel('Tests') axes[1].set_title('No. of activations') axes[1].legend() # 第三个子图 axes[2].bar(values, stats_list_avgstract, width, label='Avg. strength of activations') axes[2].set_xlabel('Tests') axes[2].set_title('Avg. strength of activations') axes[2].legend() # 第四个子图 axes[3].bar(values, stats_list_avglenact, width, label='Avg. length of activations') axes[3].set_xlabel('Tests') axes[3].set_title('Avg. length of activations') axes[3].legend() # 第五个子图 axes[4].bar(values, stats_list_avgtimbet, width, label='Avg. time between activations') axes[4].set_xlabel('Tests') axes[4].set_title('Avg. time between activations') axes[4].legend() # 调整子图间距避免重叠 plt.tight_layout() plt.show()
你之前用subplot出错,是因为误在plt.bar返回的BarContainer对象上调用subplot方法——subplot是用来创建子图的,必须先创建子图对象,再在子图上执行绘图操作。
内容的提问来源于stack exchange,提问作者Martaer
相关产品推荐
相关产品推荐

