如何在同一图中并排绘制多信号,X轴设为接收器编号并优化可视化
地震轨迹可视化优化:自定义X轴编号与信号正区域填充
以下是针对你需求的修改代码,同时解决X轴显示接收器编号、填充信号正区域两个问题:
import numpy as np import matplotlib.pyplot as plt # 加载数据 stack = np.loadtxt("Stack/2D_stack.semd", skiprows=1) ncols = stack.shape[1] receiver_count = ncols - 1 # 接收器总数:1到96 fig1 = plt.figure(figsize=(14, 8)) ax = plt.gca() val = 0.5 # 轨迹间横向偏移量 shift = val for i in range(1, ncols): receiver_num = i signal = stack[:, i] time = stack[:, 0] # 绘制轨迹曲线 ax.plot(signal + shift, time, '-k') # 填充信号大于0的区域(与基准线x=shift之间) positive_mask = signal > 0 ax.fill_betweenx(time, shift, signal + shift, where=positive_mask, color='black') shift += val # 配置Y轴 ax.set_ylabel("time (s)") ax.invert_yaxis() # 配置X轴为接收器编号 tick_positions = np.arange(val, val + receiver_count * val, val) ax.set_xticks(tick_positions) ax.set_xticklabels(np.arange(1, receiver_count + 1)) ax.set_xlabel("Receiver Number") fig1.tight_layout() plt.show()
关键改动说明
X轴替换为接收器编号
- 计算每个接收器轨迹的基准偏移位置(即原信号0点对应的X坐标),将这些位置设为X轴刻度点
- 通过
set_xticks和set_xticklabels把刻度替换为1到96的接收器编号,同时添加明确的轴标签
填充信号正区域
- 用布尔掩码筛选出信号大于0的时间段
- 使用
fill_betweenx沿时间轴(Y轴)填充基准线与正信号曲线之间的区域,仅在信号为正的部分填充黑色,强化可视化效果
内容的提问来源于stack exchange,提问作者Felipe LCavalcante
相关产品推荐
相关产品推荐

