numpy 在列表中为特定值绘制垂直线[重复]

kuarbcqp  于 2023-03-30  发布在  其他
关注(0)|答案(1)|浏览(174)

此问题在此处已有答案

How to draw vertical lines on a given plot(6个答案)
3小时前关门了。
这就是我现在的代码

import os
import sys
import pandas as pd
import matplotlib.pyplot as plt
import subprocess
import tempfile
import numpy as np

filepath = sys.argv[1]

try:
    data = pd.read_csv(filepath,sep='\t',header=None,names=['timestamp', 'ch1', 'ch2', 'ch3', 'ch4', 'ch5', 'ch6'])
    first = 0
    last = -1
    time = data["timestamp"][first:last].tolist()
    ch1 = data["ch1"][first:last].tolist()
    init = time[0]

    for i in range(len(time)):
    # using index instead of timestamp to be more accurate
        time[i] = (i / 7000)

    fig = plt.figure(figsize=(20,15))
    fig.canvas.manager.set_window_title(sys.argv[1])
    plt.plot(time, ch1)

    plt.legend()
    plt.grid()
    plt.show()

每当ch1中的值达到4095时,我想画一条垂直线。我做了一些研究,并尝试使用以下代码:

plt.axvline(x=np.interp(4095, ch4, time),color='red')

我也试过用for循环遍历这些值,但我对Python和列表没有太多经验。
简而言之,我正在寻找一种方法,每当ch1中的值达到4095时绘制一条垂直线。

m1m5dgzv

m1m5dgzv1#

您需要找到时间轴上所有等于4095的点,并循环遍历它们,以便绘制多条垂直线
一个随机数的小例子:

import matplotlib.pyplot as plt
import numpy as np

start_time = 0
end_time = 10
time = np.array(range(start_time,end_time))
ch1 = np.array([8000,854,4095,465,654,89,51,4856,4095,369])

vertical_lines = time[ch1 == 4095]

for line in vertical_lines:
    plt.axvline(x = line, color = 'r', label = '4095')

plt.plot(time, ch1)
plt.show()

如果将vertical_lines更改为time[ch1 >= 4095],则将绘制ch1值等于或大于4095的所有线

相关问题