如何在折线图中为单一数据集添加带分段填充颜色的区域
实现带区域分段填充的折线图(单一数据集)
嘿,我来帮你搞定这个带分段填充颜色的折线图!用Python的Matplotlib库就能轻松实现,我给你整个完整的示例,一步一步讲清楚~
核心思路
我们的目标是基于单一数据集,把折线与阈值之间的区域按数值范围分成不同段,每段用不同颜色填充。核心是用fill_between()函数,通过where参数指定每个区域的条件,叠加多个填充层就能实现你要的效果。
完整代码示例
import matplotlib.pyplot as plt import numpy as np # 1. 生成单一数据集:模拟带趋势的时间序列数据 x = np.arange(0, 100, 1) # x轴:0到99的时间点 y = np.random.randn(100).cumsum() + 10 # y轴:累积随机数,加10保证数值大部分为正 # 2. 定义区域分段规则:阈值+对应颜色 threshold_low = 5 # 低区域阈值 threshold_high = 15 # 高区域阈值 segment_colors = { "low": "#ffcccc", # 浅红色:y < 5 "mid": "#ccffcc", # 浅绿色:5 ≤ y ≤15 "high": "#ccccff" # 浅蓝色:y >15 } # 3. 创建画布并绘制基础折线 plt.figure(figsize=(12, 6)) plt.plot(x, y, color="#333333", linewidth=2, label="数据趋势线") # 4. 分段填充区域 # 填充低区域:y低于低阈值时,填充y和低阈值之间的区域 plt.fill_between( x, y, threshold_low, where=(y < threshold_low), color=segment_colors["low"], alpha=0.5 # 透明度,避免遮挡折线 ) # 填充中间区域:y在两个阈值之间时,填充低阈值和y之间的区域 plt.fill_between( x, threshold_low, y, where=(y >= threshold_low) & (y <= threshold_high), color=segment_colors["mid"], alpha=0.5 ) # 填充高区域:y高于高阈值时,填充高阈值和y之间的区域 plt.fill_between( x, threshold_high, y, where=(y > threshold_high), color=segment_colors["high"], alpha=0.5 ) # 5. 添加辅助元素让图表更清晰 plt.axhline(y=threshold_low, color="#ff6666", linestyle="--", label="低阈值线") plt.axhline(y=threshold_high, color="#6666ff", linestyle="--", label="高阈值线") plt.xlabel("时间点", fontsize=12) plt.ylabel("数值", fontsize=12) plt.title("单一数据集的区域分段填充折线图", fontsize=14) plt.legend(fontsize=10) plt.grid(alpha=0.3) # 添加网格线增强可读性 plt.show()
关键代码解释
fill_between():这是实现区域填充的核心函数,它可以填充两条曲线之间的区域。我们这里用它来填充折线和阈值线之间的区域。where参数:用来指定填充的条件,只有满足条件的x区间才会被填充,完美实现分段效果。- 透明度
alpha:设置为0.5可以让填充色不会完全遮挡折线和其他元素,视觉效果更友好。 - 叠加填充:依次对低、中、高三个区域调用
fill_between(),就能让不同区域显示不同颜色。
如果你需要基于其他规则分段(比如按x轴区间,而不是y值),只需要修改where里的条件即可,比如where=(x >= 0) & (x < 30)就能填充x从0到30的区域。
内容的提问来源于stack exchange,提问作者PratikD
相关产品推荐
相关产品推荐

