如何为Python风玫瑰图设置统一的颜色图例与刻度
统一多张风玫瑰图的刻度与颜色图例
要让多张风玫瑰图的刻度、颜色图例完全一致,核心是强制所有图表使用相同的风速分组区间、颜色映射和刻度范围,以下是具体实现方法:
关键修改点
- 手动定义统一的风速分组区间(
bins),避免每张图自动生成不同区间 - 指定固定的颜色映射(
cmap) - 统一设置纵轴(百分比)的刻度范围
修改后的完整代码
from windrose import WindroseAxes from matplotlib import pyplot as plt import matplotlib.cm as cm import pandas as pd # 读取数据 MON = pd.read_csv(r'data.csv') ws = MON["Ws"].values wd = MON["Wd"].values # 定义全局统一的风速分组区间(根据你的数据范围调整) # 示例按0-2, 2-4,...,8-10 m/s分组,确保所有图用同一套区间 unified_bins = [0, 2, 4, 6, 8, 10] # 统一颜色映射 unified_cmap = cm.viridis # 绘制第一张图 fig1, ax1 = plt.subplots(subplot_kw={'projection': 'windrose'}) ax1.bar(wd, ws, normed=True, opening=0.8, edgecolor='white', bins=unified_bins, cmap=unified_cmap) ax1.set_title('plot1') # 统一百分比刻度范围,示例设为0-30% ax1.set_ylim(0, 30) ax1.set_legend(title='风速 (m/s)') # 绘制第二张图(替换为你的第二组数据即可) # 示例用同一组数据演示,实际可替换为另一CSV的ws2、wd2 ws2 = ws wd2 = wd fig2, ax2 = plt.subplots(subplot_kw={'projection': 'windrose'}) ax2.bar(wd2, ws2, normed=True, opening=0.8, edgecolor='white', bins=unified_bins, cmap=unified_cmap) ax2.set_title('plot2') ax2.set_ylim(0, 30) ax2.set_legend(title='风速 (m/s)') plt.show()
代码解释
unified_bins:手动设置风速分组区间,让所有图表的颜色块对应完全相同的风速范围,从根源解决图例区间不一致的问题。unified_cmap:指定固定颜色映射表,避免matplotlib自动为不同图表分配不同配色。set_ylim:统一设置百分比刻度的上下限,保证多张图的纵轴刻度对齐。
原问题图例对比
第一张图:
第二张图:
内容的提问来源于stack exchange,提问作者hari
相关产品推荐
相关产品推荐

