python - 每当 matplotlib 中两条线相遇时,如何使用 Python 打印某些内容?

标签 python pandas matplotlib plot lines

这是我的代码:

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

关于python - 每当 matplotlib 中两条线相遇时,如何使用 Python 打印某些内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44309901/

相关文章:

Python 异步强制超时

python - 动态长度Django模型字段

python - pandas MultiIndex 滚动平均值

python - 如何创建包含基于应用于多列的分析条件的有序列表的 pandas 数据框

python - Celery 结果后端 HTML 和 JSON

python - 阻止python关闭错误

python - 如何合并同一数据框的多列

python - 在 3D numpy 矩阵中绘制给定值的表面轮廓

python - 在 Matplotlib 中以科学计数法显示第一位十进制数字

matplotlib - 与底部旋转文本对齐