matplotlib 在开始和结束处放大了 x 轴

问题描述 投票:0回答:1

我有一个频率相对较高的信号,我想详细查看记录信号的开始和结束。就像信号长 1 小时一样,我希望前 10 秒和最后 10 秒放大(在 x 轴上),中间部分“正常”。我已经找到了这个方法 'axs.set_yscale('function',functions=(forward, inverse))' ,它应该能够定义自定义比例,但我无法理解它是如何工作的,而且我找不到很多有关此方法的文档。

我无法分享真实数据,但数据看起来与正弦非常相似,因此可以使用此图将其可视化:

fig, axs = plt.subplots()
x = np.arange(0, 1000 * np.pi, 0.1)
y = 2 * np.sin(x) + 3
axs.plot(x, y)
python matplotlib plot
1个回答
0
投票

我想这基本上就是你想要的。 这将 0-10 映射到 0-10、10 到 1000 pi 映射到 10 到 20、1000pi-10 映射到 1000 pi 从 20 到 30(例如,每个 1/3)。 它在两侧都包含额外的值,以防您的数据超出您指定的限制。

import matplotlib.pyplot as plt
import numpy as np

fig, axs = plt.subplots()
x = np.arange(0, 30 * np.pi, 0.1)
y = 2 * np.sin(x) + 3
axs.plot(x, y)

xdata = np.array([-1e6, 0, 10, np.max(x) - 10, np.max(x), 1e6])
# make 0 to 10 linear, 10 to max(x)-10 much faster linear
# max(x)-10 to max(x) slower linear
xnew = np.array([-1e6, 0, 10, 20, 30, 1e6])


def forward(x):
    return np.interp(x, xdata, xnew)


def inverse(x):
    return np.interp(x, xnew, xdata)

axs.set_xscale('function', functions=(forward, inverse))

Image with the first and last 10 s zoomed

© www.soinside.com 2019 - 2024. All rights reserved.