python 动态图形_在matplotlib中动态更新图形

# when the code works but it's meaningless to include it

### When I can't get this part to work and I'd need your code

如何在matplotlib中隐藏或显示轴对象(子图),以便在同一图形中的不同轴之间切换?

我正在使用matplotlib在Tkinter图形用户界面中显示图形,我想使用单选按钮在同一图形中的不同轴之间切换。在

基本上我会有一些单选按钮链接到IntVar():

^{pr2}$

然后,我将使用自定义方法跟踪IntVar(),用请求的图形更新我的图形:choice.trace("w", lambda choice: myGraphic.showGraphic(version))

因此,每次用户单击单选按钮时,图形都会更新为不同版本的绘图。现在的问题是,我不知道如何正确地显示图片。假设我使用这个类系统来绘制相同数据的两个不同版本:class Version1():

def __init__(self, ax, data):

self.ax = ax #This is a Axes object

self.data = self._formatDataV1(data)

self._draw()

self._setOptions()

self.hide()

def _formatDataV1(self, data):

#Here I manipulate the raw data to extract the info I need for this version

#Just a bunch of math algorithms it works fine

def _setOptions(self):

#Here I can overwrite or change settings specific for this version

def _draw(self):

self.ax.bar(self.data[0], self.data[1], width=1, color='red')

self._setOptions()

def hide(self):

###How do I remove the ax without affecting the figure?

def show(self):

###If I want to see this version again I don't want the cost of redrawing

class Version2():

def __init__(self, ax, data):

self.ax = ax #This is a Axes object

self.data = self._formatDataV1(data)

self._draw()

self._setOptions()

self.hide()

def _formatDataV2(self, data):

#The data is manipulated differently here to extract new information

def _setOptions(self):

#These options are specific to the version2 to get the display right

def _draw(self): #Drawing a different version of the graphic with differently formated data

self.ax.plot(self.data[0], self.data[1])

self._setOptions()

def hide(self):

###How do I remove the ax without affecting the figure?

def show(self):

###If I want to see this version again I don't want the cost of redrawing

class MyGraphic(tk.LabelFrame):

def __init__(self, root, data, **options):

#I use the labelframe only as a container to make things pretty

tk.LabelFrame.__init__(self, root, text="My 1337 graphic : ", **options)

self.data = data

self.fig = mpl.figure.Figure()

self.ax = self.fig.add_subplot(111)

self._drawCanvas() #This is just for Tkinter compatibility

self.my_versions = {}

self.my_versions.update({'v1' : Version1(self.ax, self.data)})

self.my_versions.update({'v2' : Version2(self.ax, self.data)})

def _drawCanvas(self):

self.canvas = FigureCanvasTkAgg(self.figure, master=self)

self.canvas.show()

self.canvas.get_tk_widget().grid()

self.canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=1)

def _setOptions(self, **kwargs):

#Here I can set options common to both versions of the graphic

def showGraphic(self, graphic_version):

for i, item in enumerate(self.my_versions):

item.hide()

if graphic_version == 1:

self.my_versions['v1'].show()

elif graphic_version == 2:

self.my_versions['v2'].show()

self._setOptions()

很抱歉冗长的帖子,但我宁愿包括太多的细节,并在解决问题时删掉那些不必要的。在

基本上,我希望能够根据用户的选择在同一个图形上隐藏和显示不同的ax。这个谜题缺少的部分是我的图形显示()和我的图形.hide(). 在

我也是一个完整的matplotlib新手,我尝试了这个设计,因为它看起来很清晰,很容易在需要时实现其他版本,但是设计输入也很受欢迎。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值