这应该很容易,但是我很难过。基本上,我在matplotlib中有一个子图,每次调用一个函数时,我都会绘制一个六边形图,但是每次调用该函数时,都会得到一个新的颜色条,所以我真正想做的就是更新颜色条。不幸的是,这似乎不起作用,因为通过subplot.hexbin重新创建了附加了颜色条的对象。

def foo(self):
   self.subplot.clear()
   hb = self.subplot.hexbin(...)
   if self.cb:
      self.cb.update_bruteforce() # Doesn't work (hb is new)
   else:
      self.cb = self.figure.colorbar(hb)

我现在在这个烦人的地方,尝试完全删除颜色条轴,然后重新创建它。不幸的是,当我删除颜色条轴时,子图轴不会回收空间,并且调用self.subplot.reset_position()并没有达到我的预期。
def foo(self):
   self.subplot.clear()
   hb = self.subplot.hexbin(...)
   if self.cb:
      self.figure.delaxes(self.figure.axes[1])
      del self.cb
      # TODO: resize self.subplot so it fills the
      #    whole figure before adding the new colorbar
   self.cb = self.figure.colorbar(hb)

有没有人有什么建议?

非常感激!
亚当

最佳答案

我认为问题在于,使用del可以取消变量,但不能取消引用的对象colorbar。
如果希望将颜色条从绘图中删除并消失,则必须使用颜色条实例的remove方法,并且为此需要将颜色条包含在变量中,为此您有两个选择:

  • 在创建时将颜色条保持在一个值中,如其他答案所示。 cb=plt.colorbar()
  • 检索一个现有的颜色条,您可以按照我在这里写的内容进行操作(并赞成:)):How to retrieve colorbar instance from figure in matplotlib
    然后:
  • cb.remove()plt.draw() #update plot

    关于python - 从matplotlib中的图中删除颜色条,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5263034/

    10-14 10:19