Làm thế nào để bạn vẽ đồ thị trong python matplotlib?

Chờ để thu thập các phép đo từ một cảm biến trước khi vẽ đồ thị, nó có thể hoạt động trong một số trường hợp. 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 các 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 đó mẫu nhiệt độ được lấy 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 rằng nó nằm trong cùng thư mục với tmp102. py để chúng ta có thể sử dụng mô-đun tmp102]. Copy vào đoạn 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 mỗi giây một lần. Thoải mái hít vào cảm biến để xem nhiệt độ dao động như thế nào

Mã cần lưu ý

Để tạo một biểu đồ 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à các 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 hình mới trong hoạt ảnh

Ở dưới cùng của mã, bạn sẽ thấy công thức 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 cập nhật biểu đồ. Chúng tôi chuyển điều khiển FuncAnimation[] cho hình mà chúng tôi muốn vẽ, fig, cũng như tên của hàm sẽ được gọi đều đặn. Chúng tôi đã gọi hàm này là animate[] và được xác định ngay phía trên lệnh gọi FuncAnimation[] của chúng tôi

Vẫn trong các tham số FuncAnimation[], chúng tôi đặt animation0, đây là các đối số mà 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 trực tiếp animate[] từ bên trong mã của chính mình]. Sau đó, chúng tôi đặt animation3, đây là khoảng thời gian chúng tôi nên đợi giữa các cuộc gọi đến animate[] [tính bằng mili giây]

Ghi chú. Như một đối số cho FuncAnimation, lưu ý rằng animation1 không có bất kỳ dấu ngoặc đơn nào. Đây là chuyển một tham chiếu đến hàm chứ không phải kết quả của hàm đó. Nếu bạn vô tình thêm dấu ngoặc đơn vào hoạt ảnh ở đây, hoạt ảnh sẽ được gọi ngay lập tức [chỉ một lần] và bạn có thể gặp lỗi [có thể xảy ra lỗi gì đó về một Tuple không thể gọi được]

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ẽ tự động tăng thêm 1. ax2 và ax3 lần lượt là danh sách của chúng tôi chứa dấu thời gian và giá trị nhiệt độ. Chúng tôi đã nói với FuncAnimation[] rằng chúng tôi muốn chuyển vào ax2 và ax3 với tham số animation0. Nếu không nói rõ ràng 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ục để ghi nhớ các giá trị trong ax2 và ax3

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

Để vẽ biểu đồ, 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 thẳng bằng 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 biểu đồ sẽ được vẽ chồng lên nhau và toàn bộ biểu đồ sẽ trở thành 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 cốt truyện chỉ cập nhật một lần mỗi giây [như được định nghĩa bởi 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 độ, tốc độ này rất nhanh. Trên thực tế, bạn có thể chỉ muốn lấy mẫu nhiệt độ một lần mỗi phút, giờ hoặc thậm chí cả 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 vài mili giây một lần

Hãy thử hạ thấp animation3 xuống thứ gì đó nhỏ hơn 500. Hóa ra, việc xóa và vẽ lại biểu đồ là một quá trình khá phức tạp đối với Pi bé 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ẽ trình bày một kỹ thuật để tăng tốc độ vẽ, nhưng điều đó có nghĩa là cắt bỏ một số góc, chẳng hạn như phải đặt phạm vi tĩnh và không hiển thị dấu thời gian

Làm thế nào để cốt truyện [] làm việc matplotlib?

matplotlib. pyplot là tập hợp các hàm kiểu lệnh giúp matplotlib hoạt động giống như MATLAB. Mỗi chức năng pyplot thực hiện một số thay đổi đối với một hình. e. g. , tạo hình, tạo vùng vẽ trong hình, vẽ một số đường trong vùng vẽ, trang trí ô bằng nhãn, v.v. .

Phương pháp nào được sử dụng để vẽ biểu đồ trong matplotlib?

matplotlib cung cấp gói pyplot được sử dụng để vẽ biểu đồ của dữ liệu đã cho. matplotlib. pyplot là một tập hợp các hàm kiểu lệnh giúp matplotlib hoạt động giống như MATLAB.

Lệnh vẽ biểu đồ đường trong matplotlib là gì?

Đầu tiên hãy nhập matplotlib và numpy, những thứ này hữu ích cho việc lập biểu đồ. Bạn có thể sử dụng phương thức plot[x,y] để tạo biểu đồ đường.

matplotlib trong Python giải thích bằng ví dụ là gì?

Matplotlib là thư viện biểu đồ đồ họa và trực quan hóa dữ liệu đa nền tảng cho Python và phần mở rộng số NumPy . Như vậy, nó cung cấp một giải pháp thay thế mã nguồn mở khả thi cho MATLAB. Các nhà phát triển cũng có thể sử dụng API của matplotlib [Giao diện lập trình ứng dụng] để nhúng các ô trong các ứng dụng GUI.

Chủ Đề