如何将Matplotlib绘制的PSTH图像左移至负时间轴(起始-80ms)
PSTH图像起始点设为-80ms的修改方案
问题原因
ax.set_xlim(-80, ...)无效,是因为你的PSTH数据集x轴范围未覆盖-80ms,matplotlib默认会根据数据自动调整坐标轴范围,导致强制设置的xlim被覆盖,或者无数据区间无法显示。
两种修改方法
方法1:扩展数据集,补全无数据区间
如果原始x轴从0ms开始,手动扩展x轴到-80ms,对应区间补0(无spike数据)后再绘图:
import matplotlib.pyplot as plt import numpy as np # 原始PSTH数据示例 original_times = np.arange(0, 500, 10) # 0到500ms,步长10ms original_psth = np.random.rand(len(original_times)) # 扩展x轴至-80ms,步长保持一致 extended_times = np.arange(-80, 500, 10) # -80到0之间无数据,填充0,后续拼接原始数据 extended_psth = np.concatenate([np.zeros(8), original_psth]) # 绘图 fig, ax = plt.subplots() ax.plot(extended_times, extended_psth) ax.set_xlim(-80, 500) # 此时生效 ax.set_xlabel('Time (ms)') ax.set_ylabel('Firing Rate (Hz)') plt.show()
方法2:关闭自动缩放,强制设置坐标轴范围
无需修改数据,直接关闭x轴自动缩放,强制固定范围:
import matplotlib.pyplot as plt import numpy as np # 原始数据 times = np.arange(0, 500, 10) psth_data = np.random.rand(len(times)) # 绘图 fig, ax = plt.subplots() ax.plot(times, psth_data) # 关闭x轴自动缩放,防止matplotlib自动调整范围 ax.autoscale(enable=False, axis='x') # 强制设置x轴范围 ax.set_xlim(-80, 500) ax.set_xlabel('Time (ms)') ax.set_ylabel('Firing Rate (Hz)') plt.show()
补充说明
如果使用seaborn等第三方库绘图,可在绘图后直接调用plt.xlim(-80, 目标结束值),同样能强制生效。
内容的提问来源于stack exchange,提问作者HSCLHD
相关产品推荐
相关产品推荐

