如何为每个Matplotlib圆形设置不同颜色?解决Invalid RGBA argument报错
解决每个圆形设置不同颜色的问题
报错原因
你当前的代码给Circle的color参数传入了一个颜色列表,但Circle对象的color参数仅接受单个颜色值(如颜色名称字符串、RGBA元组等),因此触发ValueError: Invalid RGBA argument。
解决方案
下面提供两种实用的实现方式:
方式1:手动定义颜色列表,循环取色
提前准备足够数量的颜色,在循环中按索引为每个圆形分配对应颜色:
# 定义颜色列表,数量需大于等于locations的元素数量 colors = ['red', 'blue', 'green', 'orange', 'purple', 'cyan'] # 用enumerate获取循环索引,匹配对应颜色 for idx, (i, x) in enumerate(locations.items()): # Python3中用items()替代iteritems() ax.add_patch(Circle( xy=[i[2], i[1]], radius=get_radius(x), color=colors[idx % len(colors)], # 取模处理颜色不足时循环复用 alpha=0.6, transform=ccrs.PlateCarree() )) plt.show()
方式2:使用Matplotlib内置配色方案生成颜色
如果需要大量差异化颜色,可利用Matplotlib的颜色映射自动生成:
import matplotlib.pyplot as plt # 获取需要绘制的圆形数量 num_circles = len(locations) # 选择配色方案,生成对应数量的颜色(hsv为色相连续的彩虹色,也可换viridis、rainbow等) cmap = plt.cm.get_cmap('hsv', num_circles) for idx, (i, x) in enumerate(locations.items()): ax.add_patch(Circle( xy=[i[2], i[1]], radius=get_radius(x), color=cmap(idx), # 根据索引获取对应颜色 alpha=0.6, transform=ccrs.PlateCarree() )) plt.show()
内容的提问来源于stack exchange,提问作者Jhngir Khn
相关产品推荐
相关产品推荐

