在Jupyter Notebook中,如何高亮matplotlib图中特定x值范围的子序列?
高亮Matplotlib时间序列中特定X范围的子序列方法
嗨,这个需求在时间序列可视化里太常用啦!结合你用numpy数组和Jupyter Notebook的场景,我给你分享两种实用的方法,直接就能上手:
方法1:用背景高亮标记范围(最简单)
如果只是想突出某个X区间的背景,用ax.axvspan()就够了,它能快速画出一个垂直的矩形区域,不会影响原曲线的显示。
完整代码示例
%matplotlib inline # Jupyter Notebook里加这个让图表直接显示 import numpy as np import matplotlib.pyplot as plt # 生成模拟的时间序列数据(替换成你的numpy数组即可) x = np.arange(0, 10, 0.1) # X轴数据,比如时间戳 y = np.sin(x) + np.random.randn(len(x))*0.1 # Y轴数据 # 绘制原始时间序列 fig, ax = plt.subplots(figsize=(10, 4)) ax.plot(x, y, label='原始序列') # 高亮X范围:比如x=3到x=7的区域 start_x = 3 end_x = 7 ax.axvspan(start_x, end_x, facecolor='yellow', alpha=0.3, label='高亮区间') # 添加图例和标签 ax.set_xlabel('时间') ax.set_ylabel('数值') ax.legend() plt.show()
参数说明
start_x/end_x:你要高亮的X范围的起始和结束值facecolor:高亮区域的颜色,可替换为'red'、'green'等任意颜色值alpha:透明度,0是完全透明,1是完全不透明,建议设为0.2-0.4之间,避免遮挡原曲线
方法2:单独绘制高亮的子序列(突出曲线本身)
如果想让这段子序列的曲线样式和原曲线不一样(比如更粗、颜色更鲜艳),可以先提取X范围内的子数组,再单独绘制。
完整代码示例
%matplotlib inline import numpy as np import matplotlib.pyplot as plt # 同样用模拟数据(替换成你的真实数据) x = np.arange(0, 10, 0.1) y = np.sin(x) + np.random.randn(len(x))*0.1 # 绘制原始序列,可适当降低透明度突出高亮部分 fig, ax = plt.subplots(figsize=(10, 4)) ax.plot(x, y, label='原始序列', color='blue', alpha=0.6) # 定义要高亮的X范围,提取对应的子序列 start_x = 3 end_x = 7 # 用布尔索引筛选出X范围内的数据点 mask = (x >= start_x) & (x <= end_x) x_highlight = x[mask] y_highlight = y[mask] # 绘制高亮的子序列,设置差异化样式 ax.plot(x_highlight, y_highlight, label='高亮子序列', color='red', linewidth=3) # 添加图例和标签 ax.set_xlabel('时间') ax.set_ylabel('数值') ax.legend() plt.show()
自定义技巧
- 可以给高亮曲线加标记点:比如加上
marker='o'参数,让这段的数值点更显眼 - 同时结合两种方法:既用
axvspan高亮背景,又单独绘制加粗的曲线,视觉效果会更突出
内容的提问来源于stack exchange,提问作者Tín Tr.
相关产品推荐
相关产品推荐

