簡體   English   中英

Python Matplotlib:使用小部件以交互方式更改顯示的圖形

[英]Python Matplotlib: change the displayed figure interactively using a widget

我有一個數據列表,例如{A_1,A_2,A_3,...},其中每個元素又是一個很大的數據列表,例如A_i = {p_i_1,p_i_2,...}。

我想使用Matplotlib制作每個A_i(例如plot_A_i)的列表圖,然后具有更改plot_A_i之間顯示的圖的功能。 因為每個A_i都很大,所以我不想每次都重新繪制它,而是先繪制所有圖,然后使用Matplotlib的某種小部件更改顯示的圖。 我想到的是類似Mathematica的“操縱”。 我怎樣才能做到這一點?

這是我使用Axes.set_visible()完成的方法。 任何意見和/或建議都將受到歡迎!

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider

def f(t):
    return np.exp(-t) * np.cos(2*np.pi*t)

class PlotList:
    def __init__(self, plots):
        self.cur_val = 0
        self.plots = plots
        self.plots[self.cur_val].set_visible(True)
    def set_visible(self, val):
        new_val = int(val)
        if(self.cur_val != new_val):
            self.plots[self.cur_val].set_visible(False)
            self.plots[new_val].set_visible(True)
            self.cur_val = new_val
        fig.canvas.draw_idle()

t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)


fig = plt.figure()
plot_axes_rect = [0.125, 0.15, .8, 0.75]
plots = [fig.add_axes(plot_axes_rect, label=1, visible=False),
         fig.add_axes(plot_axes_rect, label=2, visible=False)]
plots[0].plot(t1, f(t1), 'bo')
plots[1].plot(t2, f(t2), 'k')

pl = PlotList(plots)

theta_axes = fig.add_axes([0.125, 0.05, .8, 0.05])
theta_slider = Slider(theta_axes, 'theta', 0, 2,
                      valinit=pl.cur_val, valfmt='%d')

theta_slider.on_changed(pl.set_visible)

plt.show()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM