如何在同一个图表上绘制多条带有偏移的曲线

Den*_*Gor 3 python matplotlib

我从示波器读取波形。波形根据时间分为 10 段。我想绘制完整的波形,一个段在另一个段之上(或之下),可以这么说,“具有垂直偏移”。此外,还需要彩色图来显示信号强度。我只能得到以下情节:

在此输入图像描述

正如您所看到的,所有曲线都是叠加的,这是不可接受的。人们可以向 y 数据添加偏移量,但这不是我想要的方式。当然有一种更简洁的方法来绘制我的数据吗?我已经尝试了一些方法来使用 pylab 解决这个问题,但我什至不确定如何继续以及这是否是正确的方法。

任何帮助将不胜感激。

import readTrc #helps read binary data from an oscilloscope
import matplotlib.pyplot as plt

fName = r"...trc"
datX, datY, m = readTrc.readTrc(fName)

segments = m['SUBARRAY_COUNT'] #number of segments

x, y = [], []

for i in range(segments+1):
    x.append(datX[segments*i:segments*(i+1)])
    y.append(datY[segments*i:segments*(i+1)])

plt.plot(x,y)
plt.show()
Run Code Online (Sandbox Code Playgroud)

小智 5

具有垂直偏移的图听起来像频率轨迹
来自seaborn的kde_joyplot示例

这是一种调整 y 值的方法。

MatPlotLib 中的频率轨迹

同样的情节也被创造为喜悦情节/山脊线情节。Seaborn 有一个实现,可以创建一系列绘图 (FacetGrid),然后调整它们之间的偏移以获得类似的效果。

https://seaborn.pydata.org/examples/kde_joyplot.html

使用线图的示例可能如下所示:

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

segments = 10
points_per_segment = 100

#your data preparation will vary
x = np.tile(np.arange(points_per_segment), segments)
z = np.floor(np.arange(points_per_segment * segments)/points_per_segment)
y = np.sin(x * (1 + z))
        
    
df = pd.DataFrame({'x': x, 'y': y, 'z': z})

pal = sns.color_palette()
g = sns.FacetGrid(df, row="z", hue="z", aspect=15, height=.5, palette=pal)
g.map(plt.plot, 'x', 'y')
g.map(plt.axhline, y=0, lw=2, clip_on=False)
# Set the subplots to overlap
g.fig.subplots_adjust(hspace=-.00)
g.set_titles("")
g.set(yticks=[])
g.despine(bottom=True, left=True)

plt.show()
Run Code Online (Sandbox Code Playgroud)

出去: 在此输入图像描述

  • 我没有投反对票,但你的答案主要是链接。您可以用代码示例充实您的答案,也可以删除答案并在评论中发布链接? (2认同)