Tôi đang cố tạo một bản đồ trực tiếp cập nhật khi có nhiều dữ liệu hơn.Tương tác với cốt truyện matplotlib trực tiếp
import os,sys
import matplotlib.pyplot as plt
import time
import random
def live_plot():
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_xlabel('Time (s)')
ax.set_ylabel('Utilization (%)')
ax.set_ylim([0, 100])
ax.set_xlim(left=0.0)
plt.ion()
plt.show()
start_time = time.time()
traces = [0]
timestamps = [0.0]
# To infinity and beyond
while True:
# Because we want to draw a line, we need to give it at least two points
# so, we pick the last point from the previous lists and append the
# new point to it. This should allow us to create a continuous line.
traces = [traces[-1]] + [random.randint(0, 100)]
timestamps = [timestamps[-1]] + [time.time() - start_time]
ax.set_xlim(right=timestamps[-1])
ax.plot(timestamps, traces, 'b-')
plt.draw()
time.sleep(0.3)
def main(argv):
live_plot()
if __name__ == '__main__':
main(sys.argv)
Mã trên hoạt động. Tuy nhiên, tôi không thể tương tác với cửa sổ được tạo bởi plt.show()
Làm cách nào để tôi có thể vẽ dữ liệu trực tiếp trong khi vẫn có thể tương tác với cửa sổ lô?
Tôi đang bối rối .. nếu vòng lặp chỉ chạy trong 'plt.pause()', thì tôi không phải chỉ định khoảng thời gian tạm dừng lớn để đảm bảo rằng nó có thể nhận và xử lý tất cả các lệnh của tôi (chuột kéo - kéo dài/zoom/etc)? Bạn có thể sửa đổi ví dụ của tôi để mô tả những gì bạn có nghĩa là? –
Để lại ví dụ của bạn giống như bây giờ và thay thế 'time.sleep (0.3)' bằng 'plt.pause (0.3)'. Bạn không cần một khoảng thời gian tạm dừng lớn vì bạn có một khoảng thời gian tạm dừng ngắn sau một khoảng thời gian không ngừng nghỉ khác. Nếu mã của bạn dành ít thời gian nhất giữa các lệnh tạm dừng thì mọi thứ sẽ chạy trơn tru. – kazemakase