Hướng dẫn update real time data with python - cập nhật dữ liệu thời gian thực với python

FavoritedFavorite14 Favorite 14

Cập nhật biểu đồ trong thời gian thực

Chờ đợi để thu thập các phép đo từ một cảm biến trước khi vẽ nó có thể hoạt động trong một số tình huống. Nhiều lần, bạn muốn có thể theo dõi đầu ra của cảm biến trong thời gian thực, điều đó có nghĩa là bạn có thể tìm kiếm xu hướng khi chúng xảy ra. Để thực hiện điều đó, chúng tôi sẽ tạo một hình ảnh động trong đó lấy mẫu nhiệt độ và biểu đồ được cập nhật ngay lập tức.

Mã hoạt hình

Mở một tệp mới (một lần nữa, đảm bảo nó nằm trong cùng thư mục với TMP102.py để chúng ta có thể sử dụng mô -đun TMP102). Sao chép trong mã sau:

language:python
import datetime as dt
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import tmp102

# Create figure for plotting
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
xs = []
ys = []

# Initialize communication with TMP102
tmp102.init()

# This function is called periodically from FuncAnimation
def animate(i, xs, ys):

    # Read temperature (Celsius) from TMP102
    temp_c = round(tmp102.read_temp(), 2)

    # Add x and y to lists
    xs.append(dt.datetime.now().strftime('%H:%M:%S.%f'))
    ys.append(temp_c)

    # Limit x and y lists to 20 items
    xs = xs[-20:]
    ys = ys[-20:]

    # Draw x and y lists
    ax.clear()
    ax.plot(xs, ys)

    # Format plot
    plt.xticks(rotation=45, ha='right')
    plt.subplots_adjust(bottom=0.30)
    plt.title('TMP102 Temperature over Time')
    plt.ylabel('Temperature (deg C)')

# Set up plot to call animate() function periodically
ani = animation.FuncAnimation(fig, animate, fargs=(xs, ys), interval=1000)
plt.show()

Lưu và chạy mã. Bạn sẽ thấy ngay một biểu đồ được cập nhật khoảng một giây. Hãy thoải mái thở trên cảm biến để xem nhiệt độ dao động như thế nào.

Hướng dẫn update real time data with python - cập nhật dữ liệu thời gian thực với python

Mã cần lưu ý

Để tạo ra một cốt truyện thời gian thực, chúng ta cần sử dụng mô-đun animation trong matplotlib. Chúng tôi thiết lập hình và trục theo cách thông thường, nhưng chúng tôi vẽ trực tiếp vào các trục, ax, khi chúng tôi muốn tạo một khung mới trong hình ảnh động.

Ở dưới cùng của mã, bạn sẽ thấy nước sốt bí mật cho hoạt hình:

ani = animation.FuncAnimation(fig, animate, fargs=(xs, ys), interval=1000)

FunCanimation là một chức năng đặc biệt trong mô -đun animation cho phép chúng tôi tự động hóa việc cập nhật biểu đồ. Chúng tôi vượt qua FuncAnimation() một tay cầm cho con số chúng tôi muốn vẽ, fig, cũng như tên của một hàm nên được gọi là các khoảng thời gian đều đặn. Chúng tôi đã gọi hàm này animate() và được xác định ngay trên cuộc gọi FuncAnimation() của chúng tôi.

Tuy nhiên, trong các tham số FuncAnimation(), chúng tôi đặt ____10, đó là các đối số chúng tôi muốn chuyển đến hàm animation1 của mình (vì chúng tôi không gọi animate() trực tiếp từ trong mã của chúng tôi). Sau đó, chúng tôi đặt animation3, đó là thời gian chúng tôi nên chờ đợi giữa các cuộc gọi đến animate() (tính bằng mili giây).

Lưu ý: Là một đối số để tạo chức năng, lưu ý rằng animation1 không có dấu ngoặc đơn nào. Điều này đang chuyển một tham chiếu đến hàm và không phải là kết quả của chức năng đó. Nếu bạn vô tình thêm dấu ngoặc đơn vào hoạt hình ở đây, Animate sẽ được gọi ngay lập tức (chỉ một lần) và bạn có thể sẽ gặp lỗi (có lẽ là một cái gì đó về một tuple không thể gọi được)! As an argument to FuncAnimation, notice that animation1 does not have any parentheses. This is passing a reference to the function and not the result of that function. If you accidentally add parentheses to animate here, animate will be called immediately (only once), and you'll likely get an error (probably something about a tuple not being callable)!

Nếu bạn nhìn vào cuộc gọi đến animate(), bạn sẽ thấy rằng nó có 3 tham số mà chúng tôi đã xác định:

animation7

animation8 là số khung. Tham số này là cần thiết khi xác định hàm cho animation9. Bất cứ khi nào animate() được gọi, animation8 sẽ được tự động tăng thêm 1. ax2 và ax3 là danh sách của chúng tôi có chứa các giá trị dấu thời gian và nhiệt độ tương ứng. Chúng tôi đã nói với FuncAnimation() rằng chúng tôi muốn vượt qua trong ax2 và ax3 với tham số animation0. Không nói rõ ràng chúng tôi muốn ax2 và ax3 làm tham số, chúng tôi sẽ cần sử dụng các biến toàn cầu để ghi nhớ các giá trị trong ax2 và ax3.

Trong animate(), chúng tôi thu thập dữ liệu nhiệt độ và nối vào dấu thời gian, giống như trong ví dụ trước. Chúng tôi cũng cắt ngắn cả ax2 và ax3 để giữ cho chúng giới hạn trong 20 yếu tố. Nếu chúng ta để các danh sách phát triển vô thời hạn, dấu thời gian sẽ khó đọc và cuối cùng chúng ta sẽ chạy bộ nhớ.

Để vẽ cốt truyện, chúng ta phải xóa các trục bằng ani = animation.FuncAnimation(fig, animate, fargs=(xs, ys), interval=1000)5 và sau đó vẽ đường dây với ani = animation.FuncAnimation(fig, animate, fargs=(xs, ys), interval=1000)6. Nếu chúng ta không xóa chúng mỗi lần, các lô sẽ được vẽ lên nhau và toàn bộ biểu đồ sẽ là một mớ hỗn độn. Tương tự, chúng ta cần định dạng lại cốt truyện cho từng khung hình.

Bạn có thể nhận thấy rằng lô chỉ cập nhật một lần mỗi giây (theo định nghĩa của ani = animation.FuncAnimation(fig, animate, fargs=(xs, ys), interval=1000)7). Đối với một số cảm biến, chẳng hạn như cảm biến nhiệt độ, điều này rất nhanh. Trên thực tế, bạn chỉ có thể muốn lấy mẫu nhiệt độ mỗi phút, giờ hoặc thậm chí ngày. Tuy nhiên, tốc độ lấy mẫu này có thể hoàn toàn quá thấp đối với các cảm biến khác, chẳng hạn như cảm biến khoảng cách hoặc gia tốc kế, trong đó ứng dụng của bạn yêu cầu cập nhật cứ sau vài mili giây.

Hãy thử hạ animation3 xuống một cái gì đó dưới 500. Khi nó bật ra, việc xóa và vẽ lại biểu đồ là một quá trình chuyên sâu cho PI nhỏ của chúng tôi và bạn có thể sẽ không nhận được nhiều hơn 2 hoặc 3 bản cập nhật mỗi giây. Trong phần tiếp theo, chúng tôi sẽ hiển thị một kỹ thuật để tăng tốc độ vẽ, nhưng điều đó có nghĩa là cắt một số góc, chẳng hạn như phải đặt một phạm vi tĩnh và không hiển thị dấu thời gian.


Python có thể xử lý thật không

Bài viết này nói về hai cách để có được bảng điều khiển thời gian thực của bạn trong Python: Thứ nhất, chúng tôi sử dụng dữ liệu phát trực tuyến và tạo bảng điều khiển phát trực tuyến tự động. Thứ hai, chúng tôi sử dụng nút làm mới của người Viking để làm mới bảng điều khiển bất cứ khi nào chúng tôi cần bảng điều khiển để được làm mới.we use streaming data and create an auto-updated streaming dashboard. Second, we use a “Refresh” button to refresh the dashboard whenever we need the dashboard to be refreshed.

Arcpy trong Python là gì?

ArcPy là gói trang web Python cung cấp một cách hữu ích và hữu ích để thực hiện phân tích dữ liệu địa lý, chuyển đổi dữ liệu, quản lý dữ liệu và tự động hóa bản đồ với Python.a Python site package that provides a useful and productive way to perform geographic data analysis, data conversion, data management, and map automation with Python.

Vận tốc ESRI là gì?

ArcGIS Velocity là một khả năng bổ sung của ArcGIS Online, phần mềm hàng đầu của ESRI dưới dạng phần mềm ánh xạ và phân tích dịch vụ (SaaS).Vận tốc có sẵn ở ba cấp độ đăng ký, tiêu chuẩn, nâng cao và chuyên dụng, hỗ trợ các mức độ khác nhau của tốc độ xử lý dữ liệu, lưu trữ và tính toán.an add-on capability of ArcGIS Online, Esri's flagship software as a service (SaaS) mapping and analytics software. Velocity is available in three subscription levels—Standard, Advanced, and Dedicated—that support different levels of data processing speed, storage, and computation.

Cái gì là thật

GIS thời gian thực trao quyền cho bạn giám sát vị trí của bất kỳ loại cảm biến hoặc thiết bị nào-tăng tốc thời gian phản hồi, tối ưu hóa an toàn và cải thiện nhận thức hoạt động trên tất cả các tài sản và hoạt động, cho dù đang chuyển động hoặc nghỉ ngơi.empowers you with location monitoring of any type of sensor or device — accelerating response times, optimizing safety, and improving operational awareness across all assets and activities, whether in motion or at rest.