【发布时间】:2014-03-19 13:12:37
【问题描述】:
我正在绘制超过 4 个维度的数据。为了使可视化更容易,我还想绘制不同维度的所有可能的 2D 和 3D 组合。
为此,我需要一个图形并使用RadioButtons 浏览不同的选项。现在,当我从 2D 更改为 3D 时,我需要不同数量的轴,所以我清除了我的整个图形并再次绘制所有内容,但是我的 RadioButton 不再工作(尽管我在 clf() 之后再次绘制它):
class TEST(object):
def __init__(self):
self.num2d = 6
self.rows2d = 3
self.cols2d = 2
self.num3d = 4
self.rows3d = 2
self.cols3d = 2
self.fig2 = plt.figure()
self.add2dAxes = []
for i in range(self.num2d):
ii = 100*self.rows2d + 10*self.cols2d + i+1
self.add2dAxes.append(plt.subplot(ii))
self.add_dim = 2
self.updatePlotAdd()
def click_dim(dim):
print dim
if dim == "2D":
self.updatePlotAdd2d()
elif dim == "3D":
self.updatePlotAdd3d()
else:
self.updatePlotAdd4d()
self.radioDim.on_clicked(click_dim)
self.fig2._my_btn = self.radioDim
plt.show()
def updatePlotAdd2d(self):
print "2D"
self.add_dim = 2
self.fig2.clf()
self.add2dAxes = []
for i in range(self.num2d):
ii = 100*self.rows2d + 10*self.cols2d + i+1
self.add2dAxes.append(plt.subplot(ii))
self.updatePlotAdd()
def updatePlotAdd3d(self):
print "3D"
self.add_dim = 3
self.fig2.clf()
self.add3dAxes = []
for i in range(self.num3d):
ii = 100*self.rows3d + 10*self.cols3d + i+1
self.add3dAxes.append(plt.subplot(ii))
self.updatePlotAdd()
def updatePlotAdd4d(self):
print "4D"
self.add_dim = 4
self.fig2.clf()
self.updatePlotAdd()
def updatePlotAdd(self):
print "updatePlotAdd"
rax = plt.axes([0.01, 0.7, 0.08, 0.1], axisbg='grey')
self.radioDim = RadioButtons(rax, ("2D", "3D","> 3D"), active=self.add_dim-2)
self.fig2.canvas.draw()
这个例子展示了轴是如何在你第一次点击按钮时完美改变的,但从那时起按钮就不再响应了。
【问题讨论】:
-
你能把这个减少到最小版本来复制问题吗?这里有太多与您的问题无关的代码。人们愿意提供帮助,但可能不愿意彻底整理那么多杂物。
标签: python matplotlib widget radio-button interactive