使用colorcet为xarray散点图配置31种颜色时出现重复,求解决方法
解决xarray散点图中使用colorcet实现31种离散颜色的问题
你遇到的核心问题是xarray的plot.scatter在离散色调模式下,不通过cmap参数接收离散调色板,而是需要用colors参数,或者将调色板转换为matplotlib可识别的离散Colormap。
方法1:直接使用colors参数传递离散颜色列表
seaborn的color_palette返回的是颜色列表,直接赋值给colors参数即可,不需要用cmap:
import seaborn as sns import colorcet as cc import matplotlib.pyplot as plt # 生成31种离散颜色 palette = sns.color_palette(cc.glasbey, n_colors=31) # 使用colors参数替代cmap ds2.plot.scatter( x="salinity", y="temperature", hue="latitude", marker='.', linewidth=0, add_guide=True, colors=palette, # 这里用colors而非cmap levels=31, hue_style='discrete' ) plt.legend(loc='center left', bbox_to_anchor=(1, 0.5)) plt.show()
方法2:将调色板转换为matplotlib离散Colormap(可选)
如果更习惯用cmap参数,可以把seaborn的调色板转为matplotlib的Colormap:
import seaborn as sns import colorcet as cc import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap # 生成调色板并转为matplotlib Colormap palette = sns.color_palette(cc.glasbey, n_colors=31) discrete_cmap = ListedColormap(palette) ds2.plot.scatter( x="salinity", y="temperature", hue="latitude", marker='.', linewidth=0, add_guide=True, cmap=discrete_cmap, # 现在可以用cmap levels=31, hue_style='discrete' ) plt.legend(loc='center left', bbox_to_anchor=(1, 0.5)) plt.show()
关键区别说明
- Seaborn的
scatterplot用palette参数接收离散调色板,而xarray的plot.scatter在hue_style='discrete'时,优先用colors参数传递颜色列表; cmap参数在xarray中主要针对连续色调,即使设置了离散模式,直接传颜色列表给cmap也不会被正确解析,因为它期望的是Colormap对象而非列表。
内容的提问来源于stack exchange,提问作者Maria Cristina Alvarez
相关产品推荐
相关产品推荐

