Làm thế nào để bạn vẽ đồ thị động trong python?
Ví dụ này trình bày cách tự động thêm và xóa các ô khỏi bố cục (trong trường hợp này là Cột) bằng cách sử dụng các phương thức $ python stocksdata.py 4 và $ python stocksdata.py 5 (yêu cầu máy chủ Python trực tiếp) Show slider = pn.widgets.IntSlider(name='N', start=0, end=5) column = pn.Column('This column will be populated with N Plots', sizing_mode="stretch_width") def set_plots(event): nplots = event.new-event.old for i in range(abs(nplots)): if nplots < 0: column.pop(len(column)-1) elif nplots > 0: column.append(hv.Scatter(np.random.randn(1000, 2)).opts(responsive=True, height=300)) column[0]=f'This column will be populated with {event.new} Plots' slider.param.watch(set_plots, 'value') slider.value = 1 pn.Row(pn.Column(slider, sizing_mode="fixed", width=300), column, sizing_mode="stretch_width") Ứng dụng#Hãy gói nó thành một mẫu đẹp có thể được phục vụ qua $ python stocksdata.py 6description = "This example demonstrates **how to dynamically add and remove plots** from a layout (in this case a Column) using the ``pop`` and ``append`` methods." pn.template.FastListTemplate(site="Panel", title="Dynamic Plot Layout", sidebar=[slider], main=[description, column]).servable(); Trang web này được tạo từ sổ ghi chép Jupyter và không phải tất cả tương tác sẽ hoạt động trên trang web này. Nhấp chuột phải để tải xuống và chạy cục bộ để có đầy đủ khả năng tương tác được hỗ trợ bởi Python Hầu hết khi nói đến matplotlib, bạn có thể sử dụng nó để tạo trực quan hóa tĩnh như biểu đồ đường, biểu đồ, biểu đồ hình tròn, biểu đồ phân tán, v.v. Tuy nhiên, nếu bạn muốn tạo một biểu đồ động tự cập nhật theo thời gian thì sao? Trong bài viết này tôi sẽ hướng dẫn các bạn cách sử dụng matplotlib để tạo biểu đồ chuỗi thời gian động. Đặc biệt, bạn sẽ sử dụng nó để hiển thị giá của một cổ phiếu và cập nhật động mỗi giây Tạo API chứng khoán RESTThay vì kết nối với API cổ phiếu trực tiếp, việc viết API mô phỏng của riêng bạn để truy xuất giá cổ phiếu sẽ dễ dàng hơn. Đối với điều này, tôi sẽ sử dụng khung bình để tạo API REST đơn giản với một điểm cuối duy nhất để lấy giá cổ phiếu Đây là toàn bộ chương trình cho API REST (mà tôi đã đặt tên là stockdata. py) import pickle Trong chương trình trên, có một điểm cuối duy nhất — $ python stocksdata.py 8, mà bạn có thể gọi để lấy giá cổ phiếu của một cổ phiếu cụ thể. Tất cả những gì bạn cần là gửi cho nó một chuỗi JSON chứa ký hiệu chứng khoán bằng phương thức POST. Đối với mục đích mô phỏng, API chỉ hỗ trợ ba cổ phiếu — AAPL, AMD và AMZN. Tôi cũng đã chọn ngẫu nhiên giá của từng cổ phiếu dựa trên phạm vi giá gần đây của chúng. Kết quả được trả về dưới dạng chuỗi JSONĐó là tất cả cho API REST. Để kiểm tra API REST, hãy nhập lệnh sau trong Terminal $ python stocksdata.py Kiểm tra API RESTDễ dàng kiểm tra API REST. Chỉ cần sử dụng curl với các tùy chọn sau $ curl -H "Content-Type: application/json" -X POST http://localhost:5000/stocks/v1/fetch -d '{"Symbol":"AAPL"}'
Bạn sẽ nhận được kết quả dưới dạng chuỗi JSON Bạn có thể thử các ký hiệu chứng khoán khác nhau $ curl -H "Content-Type: application/json" -X POST http://localhost:5000/stocks/v1/fetch -d '{"Symbol":"AMD"}'$ curl -H "Content-Type: application/json" -X POST http://localhost:5000/stocks/v1/fetch -d '{"Symbol":"AMZN"}' Sử dụng API REST bằng PythonBây giờ API REST đang hoạt động, bạn sẽ cần sử dụng API bằng Python. Đối với điều này, hãy tạo một tệp có tên DisplayStock. py và điền vào đó đoạn mã sau description = "This example demonstrates **how to dynamically add and remove plots** from a layout (in this case a Column) using the ``pop`` and ``append`` methods." pn.template.FastListTemplate(site="Panel", title="Dynamic Plot Layout", sidebar=[slider], main=[description, column]).servable();0 Lưu ý rằng giá của cổ phiếu mà bạn muốn truy xuất được chuyển qua dưới dạng đối số lệnh — $ curl -H "Content-Type: application/json" -X POST http://localhost:5000/stocks/v1/fetch -d '{"Symbol":"AAPL"}' 1Để kiểm tra chương trình trên, gõ lệnh sau trong cửa sổ Terminal khác description = "This example demonstrates **how to dynamically add and remove plots** from a layout (in this case a Column) using the ``pop`` and ``append`` methods." pn.template.FastListTemplate(site="Panel", title="Dynamic Plot Layout", sidebar=[slider], main=[description, column]).servable();2 Bạn sẽ thấy một giá trị được in description = "This example demonstrates **how to dynamically add and remove plots** from a layout (in this case a Column) using the ``pop`` and ``append`` methods." pn.template.FastListTemplate(site="Panel", title="Dynamic Plot Layout", sidebar=[slider], main=[description, column]).servable();3Hiển thị biểu đồ chuỗi thời gian Sử dụng API REST mà chúng tôi đã phát triển trong phần trước, bây giờ chúng tôi muốn tạo biểu đồ chuỗi thời gian hiển thị giá của một cổ phiếu theo thời gian. Cho đến nay trong hầu hết các ví dụ matplotlib mà chúng ta đã thấy, tất cả các biểu đồ được vẽ hầu hết là tĩnh. Điều gì sẽ xảy ra nếu chúng ta muốn làm cho biểu đồ trở nên sống động và vẽ biểu đồ giá cổ phiếu một cách linh hoạt? . Hãy xem làm thế nào chúng ta có thể đạt được điều này Ý tưởng cơ bản trước hết là tạo một hàm để vẽ các điểm khác nhau trong biểu đồ chuỗi thời gian. Khi các điểm mới được thêm vào chuỗi thời gian, bạn có thể cập nhật và tạo hoạt ảnh cho biểu đồ bằng cách gọi hàm nhiều lần bằng cách sử dụng lớp $ curl -H "Content-Type: application/json" -X POST http://localhost:5000/stocks/v1/fetch -d '{"Symbol":"AAPL"}' 2 trong lớp $ curl -H "Content-Type: application/json" -X POST http://localhost:5000/stocks/v1/fetch -d '{"Symbol":"AAPL"}' 3Đoạn mã sau minh họa ý tưởng description = "This example demonstrates **how to dynamically add and remove plots** from a layout (in this case a Column) using the ``pop`` and ``append`` methods." pn.template.FastListTemplate(site="Panel", title="Dynamic Plot Layout", sidebar=[slider], main=[description, column]).servable();6 Ở trên
Đó là nó. Bây giờ chúng tôi đã sẵn sàng để điền vào các chi tiết để vẽ chuỗi thời gian của chúng tôi. Chúng tôi sẽ sử dụng cùng một DisplayStock. py mà chúng tôi đã tạo trước đó import pickle2 Hầu hết các mã trong đoạn mã đều tự giải thích, nhưng đây là một số điểm đáng được đề cập
Bây giờ bạn có thể kiểm tra ứng dụng bằng cách gõ lệnh sau trong Terminal $ python stocksdata.py 0Biểu đồ sẽ được cập nhật mỗi giây Và đây là cách nó trông giống như sau một thời gian Đây là video về cách hoạt hình trông như thế nào Video của tác giảFilling the ChartĐể làm cho biểu đồ hấp dẫn hơn, bạn có thể tô một số màu cho biểu đồ. Bạn có thể làm điều này bằng hàm {"price":171.65226451409433,"symbol":"AAPL"} 0$ python stocksdata.py 1Biểu đồ bây giờ sẽ được tô màu vàng Tùy thuộc vào sở thích của bạn, màu tô có thể không quá thú vị. Làm thế nào về việc thực hiện một gradient? Hóa ra bạn có thể thực hiện tô chuyển màu bằng cách sử dụng lớp {"price":171.65226451409433,"symbol":"AAPL"} 1 từ {"price":171.65226451409433,"symbol":"AAPL"} 2$ python stocksdata.py 2Lưu ý rằng bây giờ ứng dụng mong đợi đối số thứ ba chỉ định bản đồ màu ( {"price":171.65226451409433,"symbol":"AAPL"} 3). Để biết danh sách các cmap có sẵn cho matplotlib, hãy xem liên kết sauChọn Bản đồ màu trong Matplotlib - Matplotlib 3. 5. 1 tài liệuMatplotlib có một số bản đồ màu tích hợp có thể truy cập qua matplotlib. cm. get_cmap. Ngoài ra còn có các thư viện bên ngoài…matplotlib. tổ chức Dưới đây là một số giá trị cmap bạn có thể thử $ python stocksdata.py 3Hãy thử một trong những giá trị cmap trong danh mục Sequential — {"price":171.65226451409433,"symbol":"AAPL"} 4$ python stocksdata.py 4Bạn sẽ thấy màu tô gradient màu xanh lá cây Nếu bạn muốn tô màu gradient hào nhoáng hơn, hãy thử cmap {"price":171.65226451409433,"symbol":"AAPL"} 5$ python stocksdata.py 5Đây là video về biểu đồ trông như thế nào với ____84cmap Video của tác giảDịch Chuyển Trục Thời Gian (Ngang)Khi chương trình chạy, bạn sẽ nhận ra rằng trục x bị bóp rất chặt Đối với các ứng dụng như giá cổ phiếu, điều quan trọng là phải hiển thị tất cả các giá trị trong trục x từ khi bắt đầu giao dịch cho đến khi kết thúc. Nhưng đối với một số ứng dụng khác, nơi không cần thiết phải hiển thị tất cả các giá trị, sẽ rất hữu ích khi có thể dịch chuyển biểu đồ trên trục hoành khi thời gian trôi qua Hãy thêm câu lệnh sau vào ứng dụng $ python stocksdata.py 6Ở phần trên, tôi đã sử dụng số khung {"price":171.65226451409433,"symbol":"AAPL"} 7 trong hàm $ curl -H "Content-Type: application/json" -X POST http://localhost:5000/stocks/v1/fetch -d '{"Symbol":"AAPL"}' 6. Nếu giá trị của {"price":171.65226451409433,"symbol":"AAPL"} 7 lớn hơn hoặc bằng 15, tôi sẽ xóa phần tử đầu tiên trong biến $ curl -H "Content-Type: application/json" -X POST http://localhost:5000/stocks/v1/fetch -d '{"Symbol":"AMD"}'$ curl -H "Content-Type: application/json" -X POST http://localhost:5000/stocks/v1/fetch -d '{"Symbol":"AMZN"}'0 và $ curl -H "Content-Type: application/json" -X POST http://localhost:5000/stocks/v1/fetch -d '{"Symbol":"AMD"}'$ curl -H "Content-Type: application/json" -X POST http://localhost:5000/stocks/v1/fetch -d '{"Symbol":"AMZN"}'1. Bằng cách này, trục x của tôi sẽ hiển thị một số khoảng thời gian cố định Khi bạn chạy chương trình lần đầu tiên, mọi thứ trông giống như những gì chúng ta đã thấy trước đó Sau một thời gian, bạn sẽ thấy trục x bắt đầu dịch chuyển Cách tốt nhất để hình dung điều này là thông qua một video Video của tác giảTổng hợpTôi hy vọng rằng bài viết này đã mang đến cho bạn một cái nhìn mới mẻ về khả năng của matplotlib. Thay vì các biểu đồ tĩnh thông thường, matplotlib có khả năng thực hiện một số điều thực sự tuyệt vời, chẳng hạn như hoạt ảnh, cũng như kết xuất 3D (tôi sẽ nói về điều này trong một bài viết khác). Một điều nữa trước khi tôi kết thúc bài viết này. Hãy thử chạy chương trình ở chế độ nền bằng cách sử dụng ký tự $ curl -H "Content-Type: application/json" -X POST http://localhost:5000/stocks/v1/fetch -d '{"Symbol":"AMD"}'$ curl -H "Content-Type: application/json" -X POST http://localhost:5000/stocks/v1/fetch -d '{"Symbol":"AMZN"}'2 (chỉ hoạt động với máy tính chạy hệ điều hành Unix) và bạn sẽ thấy giá cổ phiếu của 3 công ty đang chạy cùng lúc Âm mưu động là gì?Biểu đồ động cho phép bạn chọn một số chỉ số nhất định cho các thành phần mô hình khác nhau và quan sát các thay đổi giá trị cho các chỉ số đó một cách linh hoạt khi mô hình chạy . Cấu hình của một hoặc nhiều cửa sổ biểu đồ có thể được lưu và sau đó được truy xuất để xem nhanh một bộ biểu đồ tùy chỉnh.
Tại sao sử dụng matplotlib nội tuyến?Tại sao matplotlib inline được sử dụng? . Sau khi lệnh này được thực thi trong bất kỳ ô nào, thì trong phần còn lại của phiên, các biểu đồ matplotlib sẽ xuất hiện ngay bên dưới ô mà hàm biểu đồ được gọi. enables the drawing of matplotlib figures in the IPython environment. Once this command is executed in any cell, then for the rest of the session, the matplotlib plots will appear directly below the cell in which the plot function was called. |