Mparange python w3schools

Matplotlib phiên bản 1. 1 đã thêm một số công cụ để tạo hoạt ảnh thực sự mượt mà. Bạn có thể tìm thấy một số hình ảnh động ví dụ hay trên trang ví dụ matplotlib. Tôi nghĩ rằng tôi sẽ chia sẻ ở đây một số điều tôi đã học được khi thử nghiệm với các công cụ này.

Hoạt hình cơ bản

Các công cụ hoạt ảnh xoay quanh lớp cơ sở

fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)
5, lớp này cung cấp một khuôn khổ để xây dựng chức năng hoạt ảnh. Các giao diện chính là
fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)
6 và
fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)
7, bạn có thể đọc thêm trong tài liệu. Ở đây tôi sẽ khám phá bằng cách sử dụng công cụ
fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)
7 mà tôi thấy là hữu ích nhất.

Trước tiên, chúng ta sẽ sử dụng

fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)
7 để thực hiện hoạt ảnh cơ bản của sóng hình sin di chuyển trên màn hình

Hoạt hình cơ bản basic_animation. pyTải xuống

"""
Matplotlib Animation Example

author: Jake Vanderplas
email: [email protected]
website: http://jakevdp.github.com
license: BSD
Please feel free to use and modify this, but keep the above information. Thanks!
"""

import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation

# First set up the figure, the axis, and the plot element we want to animate
fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)

# initialization function: plot the background of each frame
def init():
    line.set_data([], [])
    return line,

# animation function.  This is called sequentially
def animate(i):
    x = np.linspace(0, 2, 1000)
    y = np.sin(2 * np.pi * (x - 0.01 * i))
    line.set_data(x, y)
    return line,

# call the animator.  blit=True means only re-draw the parts that have changed.
anim = animation.FuncAnimation(fig, animate, init_func=init,
                               frames=200, interval=20, blit=True)

# save the animation as an mp4.  This requires ffmpeg or mencoder to be
# installed.  The extra_args ensure that the x264 codec is used, so that
# the video can be embedded in html5.  You may need to adjust this for
# your system: for more information, see
# http://matplotlib.sourceforge.net/api/animation_api.html
anim.save('basic_animation.mp4', fps=30, extra_args=['-vcodec', 'libx264'])

plt.show()

Hãy bước qua điều này và xem những gì đang xảy ra. Sau khi nhập các phần yêu cầu của

fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)
2 và
fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)
3, kịch bản thiết lập cốt truyện

fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)

Ở đây chúng ta tạo một cửa sổ hình, tạo một trục đơn trong hình, sau đó tạo đối tượng đường kẻ sẽ được sửa đổi trong hoạt ảnh. Lưu ý rằng ở đây chúng ta chỉ vẽ một đường trống. chúng tôi sẽ thêm dữ liệu vào dòng sau

Tiếp theo, chúng ta sẽ tạo các chức năng giúp hoạt ảnh diễn ra.

fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)
4 là chức năng sẽ được gọi để tạo khung cơ sở mà hoạt ảnh diễn ra. Ở đây chúng tôi chỉ sử dụng một chức năng đơn giản để đặt dữ liệu dòng thành không có gì. Điều quan trọng là hàm này trả về đối tượng đường kẻ, bởi vì điều này cho người làm phim hoạt hình biết đối tượng nào trên cốt truyện sẽ cập nhật sau mỗi khung hình.

def init():
    line.set_data([], [])
    return line,

Phần tiếp theo là chức năng hoạt hình. Nó nhận một tham số duy nhất, số khung

fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)
5 và vẽ một sóng hình sin với sự dịch chuyển phụ thuộc vào
fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)
5

________số 8

Lưu ý rằng một lần nữa ở đây chúng tôi trả về một bộ đối tượng cốt truyện đã được sửa đổi. Điều này cho khung hoạt hình biết phần nào của cốt truyện sẽ được hoạt hình

Cuối cùng, chúng ta tạo đối tượng hoạt ảnh

anim = animation.FuncAnimation(fig, animate, init_func=init,
                               frames=100, interval=20, blit=True)

Đối tượng này cần tồn tại, vì vậy nó phải được gán cho một biến. Chúng tôi đã chọn hoạt ảnh 100 khung hình với độ trễ 20ms giữa các khung hình. Từ khóa

fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)
7 là một từ khóa quan trọng. điều này yêu cầu hoạt hình chỉ vẽ lại các phần của cốt truyện đã thay đổi. Tiết kiệm thời gian với
fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)
8 có nghĩa là hoạt ảnh hiển thị nhanh hơn nhiều

Chúng tôi kết thúc bằng một lệnh lưu tùy chọn, sau đó là lệnh hiển thị để hiển thị kết quả. Đây là những gì kịch bản tạo ra

Khung tạo và lưu hoạt ảnh này rất mạnh mẽ và linh hoạt. nếu chúng ta đưa một số vật lý vào hàm

fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)
9, khả năng là vô tận. Dưới đây là một vài ví dụ về một số hoạt hình vật lý mà tôi đã thử nghiệm.

con lắc đôi

Một trong những ví dụ được cung cấp trên trang ví dụ matplotlib là hình ảnh động của con lắc đôi. Ví dụ này hoạt động bằng cách tính toán trước vị trí con lắc trong hơn 10 giây, sau đó tạo hiệu ứng động cho kết quả. Tôi đã thấy điều này và tự hỏi liệu python có đủ nhanh để tính toán động lực học một cách nhanh chóng không. hóa ra nó là

Con lắc đôi double_pendulum. pyTải xuống

fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)
3

Ở đây, chúng tôi đã tạo một lớp lưu trữ trạng thái của con lắc đôi (được mã hóa theo góc của mỗi cánh tay cộng với vận tốc góc của mỗi cánh tay) và cũng cung cấp một số chức năng để tính toán động lực học. Các chức năng hoạt hình giống như trên, nhưng chúng ta chỉ có chức năng cập nhật phức tạp hơn một chút. nó không chỉ thay đổi vị trí của các điểm mà còn thay đổi văn bản để theo dõi thời gian và năng lượng (năng lượng phải không đổi nếu toán học của chúng ta đúng. thật an ủi là vậy). Đoạn video dưới đây chỉ kéo dài mười giây, nhưng bằng cách chạy tập lệnh, bạn có thể xem con lắc dao động hỗn loạn cho đến khi máy tính xách tay của bạn hết điện

hạt trong hộp

Một hình ảnh động khác mà tôi tạo ra là sự va chạm đàn hồi của một nhóm các hạt trong hộp dưới tác dụng của trọng lực. Các va chạm là đàn hồi. chúng bảo toàn năng lượng và động lượng 2D, đồng thời các hạt bật ra khỏi thành hộp một cách thực tế và rơi xuống dưới ảnh hưởng của một lực hấp dẫn không đổi.

Hạt trong Hộp particle_box. pyTải xuống

fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)
4

Toán học nên quen thuộc với bất kỳ ai có nền tảng vật lý và kết quả là khá hấp dẫn. Tôi đã viết mã này trong một chuyến bay, và cuối cùng chỉ ngồi và xem nó trong khoảng mười phút.

Điều này chỉ là khởi đầu. có thể là một bài tập thú vị khi thêm các yếu tố khác, chẳng hạn như tính toán nhiệt độ và áp suất để chứng minh định luật khí lý tưởng hoặc vẽ biểu đồ thời gian thực của phân bố vận tốc để xem nó tiến gần đến phân bố Maxwellian dự kiến. Nó mở ra nhiều khả năng cho các trình diễn vật lý ảo.

Tóm tắt nó

Mô-đun hoạt hình matplotlib là một bổ sung tuyệt vời cho những gì đã là một gói xuất sắc. Tôi nghĩ rằng tôi chỉ mới vạch ra bề nổi của những gì có thể với những công cụ này. bạn có thể nghĩ ra những ý tưởng hoạt hình thú vị nào?

chỉnh sửa. Trong một bài đăng tiếp theo, tôi sẽ trình bày cách sử dụng những công cụ này để tạo hoạt ảnh của một hệ thống Cơ lượng tử đơn giản.