如何为Matplotlib循环生成的多图设置差异化同色系色调?
解决Matplotlib同色系色调差异不明显的问题
你当前代码里xaxis = np.linspace(0.5,1, 1000)只取了Blues色卡的后半段(偏浅的区域),10条曲线的颜色都集中在相近的浅蓝色调,自然区分度低。要让色调差异显著,核心是调整颜色映射的取值范围,覆盖色卡的更多区间,具体调整方式如下:
核心修改点
- 直接根据需要生成的曲线数量,在0到1的全范围内均匀取色,覆盖Blues色卡从深到浅的完整区间,这样各曲线的色调差异会非常明显。
- 不需要额外生成1000个点的xaxis数组,用循环索引直接计算颜色位置即可,更简洁高效。
修改后的代码
import numpy as np import matplotlib.pyplot as plt from matplotlib import cm plt.close("all") # 这里可以替换成用户选择的数量,比如5、7、8等 num_plots = 10 # 获取对应数量的Blues色阶 blues = cm.get_cmap('Blues', num_plots) fig, ax = plt.subplots() l1 = np.array([1,2,3,4,5,6,7,8,9,10]) for i in range(num_plots): l0 = l1 * i # 均匀分布在0-1区间取色,覆盖完整色卡 ax.plot(l1, l0, color=blues(i/num_plots), label=f'plot {i+1}') ax.legend() plt.show()
微调选项
如果觉得全范围的颜色太深(比如第一条曲线接近深蓝色),可以微调取值范围,比如从0.2到1,既避免过深的颜色,又保留足够的色调差异:
ax.plot(l1, l0, color=blues(0.2 + 0.8*(i/num_plots)), label=f'plot {i+1}')
内容的提问来源于stack exchange,提问作者Chat0924
相关产品推荐
相关产品推荐

