如何为多极坐标contourf子图添加独立色条并统一尺寸
给每个极坐标Contourf子图添加独立规整色条的解决方案
我来帮你搞定这个问题!要给每幅极坐标contourf子图配上独立且尺寸统一的色条,最稳妥的方法是用mpl_toolkits.axes_grid1里的make_axes_locatable工具,它能自动为每个子图生成高度完全匹配的色条轴,避免手动调整的麻烦。
完整示例代码
import matplotlib.pyplot as plt from mpl_toolkits.axes_grid1 import make_axes_locatable import numpy as np # 生成示例极坐标数据 theta = np.linspace(0, 2 * np.pi, 100) r = np.linspace(0, 1, 50) R, Theta = np.meshgrid(r, theta) # 准备4组不同的数据(替换成你的实际数据即可) data_list = [ np.sin(Theta) * R, np.cos(Theta) * R, np.sin(2 * Theta) * R, np.cos(2 * Theta) * R ] # 创建2x2的极坐标子图 fig, axes = plt.subplots(2, 2, subplot_kw={'projection': 'polar'}, figsize=(10, 10)) axes = axes.flatten() # 把二维数组转成一维,方便遍历 for ax, data in zip(axes, data_list): # 绘制contourf热力图 cs = ax.contourf(Theta, R, data, cmap='viridis', levels=15) # 为当前子图创建可分割的轴对象,用于精准放置色条 divider = make_axes_locatable(ax) # 在子图右侧添加色条轴:宽度占子图的5%,与子图间距0.1 cax = divider.append_axes("right", size="5%", pad=0.1) # 把色条绑定到对应的色条轴上 plt.colorbar(cs, cax=cax) # 给子图添加标题(可选) ax.set_title(f"Subplot {axes.tolist().index(ax)+1}") # 自动调整布局,避免元素重叠 plt.tight_layout() plt.show()
关键步骤解释
make_axes_locatable:这个工具会把当前子图的轴对象分割成可自定义的区域,让我们能精准地在子图旁添加色条轴,保证色条高度和子图完全匹配。append_axes:指定色条的位置(这里选right右侧),通过size统一控制所有色条的宽度,pad统一控制色条与子图的间距,这样所有色条的尺寸和位置会完全规整。- 子图与数据绑定:遍历过程中把每个子图对应的数据和色条一一绑定,确保每个色条只反映当前子图的数值范围。
用这个方法生成的图,每个极坐标子图旁边都会有独立的色条,而且所有色条的高度、宽度、间距完全统一,布局看起来非常整齐。
内容的提问来源于stack exchange,提问作者Jakes Sevirb
相关产品推荐
相关产品推荐

