这是我的代码:
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
.
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/