Python 绘制多索引数据帧时的工件

Python 绘制多索引数据帧时的工件,python,pandas,plot,Python,Pandas,Plot,我将数据组织成一个多索引数据框。例: Sweep Time Primary Secondary x720nm x473nm PMTShutter Sweep0001 0.00000 -87.429810 -4.882812 0.000610 0.000305 0.000000 0.00005 -87.445068 -

我将数据组织成一个多索引数据框。例:

    Sweep  Time   Primary     Secondary  x720nm    x473nm      PMTShutter                                                      
Sweep0001 0.00000 -87.429810  -4.882812  0.000610  0.000305    0.000000
          0.00005 -87.445068  -4.882812  0.000610  0.001221    0.000000
          0.00010 -87.451172  -4.272460  0.000000  0.000916    0.000000
            ...        ...       ...       ...         ...  
Sweep0039 0.68655 -87.261963  -4.272461  0.000305  0.000916    0.000305
          0.68660 -87.258911  -4.272461  0.000305  0.000916    0.000305
          0.68665 -87.252808  -5.493164  0.000000  0.000916    0.000305
          0.68670 -87.261963  -4.272461  0.000305  0.000916    0.000305
绘制任何单个扫描都可以,但是当我绘制多个扫描时,我会看到这些基本上是直线的工件(见下文)

这不是matplotlib所特有的,pyqtgraph也是如此

打印单个记录道时不存在问题:

plt.plot(data.Time['Sweep0001'], data.Primary['Sweep0001'])

打印多条记录道时出现问题:

plt.plot(data.Time['Sweep0001':'Sweep0002'], data.Primary['Sweep0001':'Sweep0002'])


数据。时间['Sweep001':'Sweep0002']
正在连接
数据。时间['Sweep001']
数据。时间['Sweep002']
。因此,时间值从0到N,然后再从0到N。 因此,
plt.plot
将从
t=N
t=0
绘制一条线,从而产生伪影

相反,每行使用一个plt.plot调用:

for i in range(1, 11):
    col = 'Sweep{:04d}'.format(i)
    plt.plot(data.Time[col], data.Primary[col])

看起来您的数据可能包含一些异常值。您是否尝试过缩小数据以确定哪些点导致这些尖峰?您指的是垂直尖峰吗?这些是正常的(它们在所有的痕迹中)。我指的是水平线(你可以看到它们在3.0标记附近,那里有向下的过渡),这可能有助于在你的问题中澄清这一点,因为这在你的图表中不容易看到。如果数据顺序不正确,则可能会出现这种情况,因此绘图会向右跳,然后返回到绘图顺序不一致的点。同样,你能缩小问题的范围并提供重现问题的具体数据,以确保问题在绘图中,而不是在你的数据中吗。我不知道你的第二点是什么意思。如果您看我的第二个示例—如果我自己绘制SWEEP001或Sweep0002,则不会出现该工件。我绘制数据的方式很可能有问题,这将是这个问题的答案。我也会把它放在原始帖子中,但是如果我分别绘制它们(即,我分别绘制Sweep0001和Sweep0002),这个问题就不会发生。因此,你在帖子中显示的数据根本不包括一列
Time
。我只是想添加到原始帖子中-如果我分别绘制它们,就不会产生这个问题。使用循环是唯一的方法吗?可以在两个数据集之间插入
np.nan
值,但这不是处理此问题的标准方法。通常你只需要使用一个循环。(尝试
plt.plot([1,2,np.nan,1,2],[0,1,2,1,2])
看看我的意思。)
for i in range(1, 11):
    col = 'Sweep{:04d}'.format(i)
    plt.plot(data.Time[col], data.Primary[col])