如何为Python多设备数据集折线图添加到期天数渐变配色
解决方案
要实现用渐变颜色映射设备到期天数的折线图,你可以利用Matplotlib的颜色映射(colormap)和归一化工具,将到期天数数值映射到对应的颜色区间。以下是修改后的完整代码:
import matplotlib.pyplot as plt import pandas as pd import numpy as np from matplotlib.colors import Normalize # 设备到期天数数据 device_expiry_days = np.array([101, 220, 1000, 43, 592, 603, 599, 499, 299, 100]) # 设置颜色映射的范围:50天为灰色,1000天及以上为红色 norm = Normalize(vmin=50, vmax=1000) # 选择从浅灰到深红的渐变映射,匹配天数越高颜色越深的需求 cmap = plt.cm.Reds # 创建画布 fig, ax = plt.subplots(figsize=(10, 6)) # 循环绘制每个设备的折线 for idx, expiry_days in enumerate(device_expiry_days): # 生成模拟数据 random_data = np.random.randint(10, 25, size=5) df = pd.DataFrame(random_data, columns=['Capacity']) # 根据到期天数获取对应颜色,处理超出范围的数值 color = cmap(norm(max(min(expiry_days, 1000), 50))) # 绘制折线并添加标签 ax.plot(df['Capacity'], color=color, label=f"设备{idx+1} | 剩余{expiry_days}天") # 添加颜色条,解释颜色与到期天数的对应关系 sm = plt.cm.ScalarMappable(norm=norm, cmap=cmap) sm.set_array([]) fig.colorbar(sm, ax=ax, label='设备到期剩余天数') # 设置图表基础元素 ax.set_title('各设备容量趋势(颜色对应到期剩余天数)') ax.set_xlabel('时间节点') ax.set_ylabel('容量') # 图例放置在画布外侧,避免遮挡折线 ax.legend(bbox_to_anchor=(1.05, 1), loc='upper left') plt.tight_layout() plt.show()
关键说明:
- 归一化(Normalize):将到期天数限制在50-1000的区间内,确保颜色映射的范围完全匹配你的需求,超出区间的数值会被强制映射到端点颜色。
- 颜色映射(cmap):选用
plt.cm.Reds实现从浅灰(低天数)到深红(高天数)的渐变,你也可以替换为plt.cm.plasma_r等其他映射调整风格。 - 颜色条(colorbar):直观展示颜色与天数的对应关系,让观看者快速理解折线颜色的含义。
- 边界处理:通过
max(min(expiry_days, 1000), 50)确保无论实际天数低于50还是高于1000,都能对应到你预设的端点颜色。
如果需要自定义渐变的具体颜色(比如指定特定灰色和红色),可以用以下代码创建自定义映射:
from matplotlib.colors import LinearSegmentedColormap # 自定义从深灰到正红的渐变 custom_cmap = LinearSegmentedColormap.from_list('custom_gray_red', ['#666666', '#FF0000']) # 替换代码中原有cmap即可
内容的提问来源于stack exchange,提问作者Ahmed Mady
相关产品推荐
相关产品推荐

