每当两行在 matplotlib 中与 Python 相遇时,如何打印一些东西?

How do I print something whenever two lines meet in matplotlib with Python?

这是我的代码:

import matplotlib.pyplot as plt
import pandas as pd
import urllib

API = 'http://api.example.com'
data = urllib.request.urlopen(API)
df = pd.DataFrame(data)

x = df['x'].tolist()
y1 = df['y1'].tolist()
y2 = df['y2'].tolist()

fig = plt.figure()
ax1 = plt.subplot2grid((1,1), (0,0))
ax1.plot(x, y1, label='y1')
ax1.plot(x, y2, label='y2')
plt.show()

基本上我画了两条线:

ax1.plot(x, y1, label='y1')
ax1.plot(x, y2, label='y2')

假设图表是实时的并且正在更新。我希望 python 在行相遇时打印一条警告消息,另一个条件是它只会打印一条警告消息 100 次。

这是我目前得到的结果:

我定义了 warning_message 函数来打印警告消息。

def warning_message():
    print("Warning!")

我也做了另一个条件,它只会打印 100 次警告消息。

count = 100
while count != '0':
    warning_message()
    count -= 1

这个 while 循环中缺少的条件是它只会在行相遇时打印警告消息。 有谁知道怎么做? :D

由于线条共享相同的 x 数据,比较它们的 y 数据相当容易。 简单地问 y2 > y1 是否足够。

import numpy as np

y1 = np.array([1,2,3])
y2 = np.array([0,1,3.1])

if np.any(y2>y1):
    print("warning")

为了在您的脚本中实现此功能,请不要使用 .tolist(),而是将数据保留为 numpy 数组,即 y1 = df['y1'].values.


似乎需要更多指导。因此,要检查所有可能的情况,y2 来自 y1 之上,或来自 y1 以下,您可以执行以下操作:

import numpy as np

y1 = np.array([1,2,3])
y2 = np.array([0,1,2.9])+1

c = y2>y1
if (np.any(c) and not np.all(c)) or (np.any(~c) and not np.all(~c)):
    print("warning")

if np.all(c) or np.all(~c):
    #reset counter here
    pass