如何实现matplotlib绘制的多个gauge仪表盘图表并排展示
实现方案
核心思路是通过matplotlib的子图网格预分配位置,修改gauge函数支持传入自定义坐标轴对象,将每个仪表盘绘制到指定子图位置即可实现并排效果。
第一步:修改gauge函数
找到你当前使用的gauge函数定义,调整函数参数和初始化逻辑,支持外部传入ax:
def gauge(labels, colors, arrow, title, ax=None): # 新增ax参数,默认值为None if ax is None: # 没有传入ax时才新建画布和坐标轴 fig, ax = plt.subplots(subplot_kw={'projection': 'polar'}, figsize=(2,2)) # 后面原来的gauge绘制逻辑保持不变,所有绘图操作都用上面的ax对象即可 # *注意:原函数中如果有单独创建画布、设置全局画布尺寸、直接调用plt.show()的代码需要删除或增加判断逻辑,避免重复创建画布*
第二步:调用时创建子图网格,分别传入对应ax
import matplotlib.pyplot as plt # 创建1行3列的子图,统一设置极坐标投影,调整画布尺寸适配三个仪表盘 fig, axs = plt.subplots(nrows=1, ncols=3, subplot_kw={'projection': 'polar'}, figsize=(12, 4)) # 分别给三个gauge传入对应位置的ax gauge(labels=['LOW','MEDIUM','HIGH','EXTREME'], colors=['#007A00','#0063BF','#FFCC00','#ED1C24'], arrow=3, title='something', ax=axs[0]) gauge(labels=['LOW','MEDIUM','HIGH','EXTREME'], colors=['#007A00','#0063BF','#FFCC00','#ED1C24'], arrow=3, title='anything', ax=axs[1]) gauge(labels=['LOW','MEDIUM','HIGH','EXTREME'], colors=['#007A00','#0063BF','#FFCC00','#ED1C24'], arrow=3, title='nothing', ax=axs[2]) # 调整子图间距避免重叠 plt.tight_layout() plt.show()
常见调整项
- 如果想要上下排布,修改
nrows=3, ncols=1即可 - 调整
figsize的宽高参数可以改变整体画布大小和仪表盘比例 - 调整
tight_layout()的pad参数可以控制子图之间的间距
内容的提问来源于stack exchange,提问作者codedancer
相关产品推荐
相关产品推荐

