我需要更新已有的数字。但是我希望它完全重绘。我目前有:
import matplotlib.pyplot as plt
def plot_func(xdata, ydata, subplot_kw=None, axis_setters=None):
fig, ax = plt.subplots(**subplot_kw)
fig.clf()
ax.cla()
fig, ax = plt.subplots(**subplot_kw)
if axis_setters:
for setter_name, setter_value in axis_setters.items():
setter_func = getattr(ax, setter_name)
setter_func(setter_value)
plot(xdata, ydata)
return fig, ax
然后稍后将调用:
plot_func([1,2,3], [1,2,3], subplot_kw={'num': 'name'}, axis_setters={'set_title': 'Title'})
问题是,尴尬:
fig, ax = plt.subplots(**subplot_kw)
fig.clf()
ax.cla()
fig, ax = plt.subplots(**subplot_kw)
我需要它,因为我需要调用plot_func任意次数,并且每次我希望它产生正确的绘图。如果我没有第二个:fig, ax = plt.subplots(**subplot_kw)
axis_setters条目不起作用。
如果我没有函数的fig.clf()
召回覆盖旧图,线条和文字变得模糊。
那么“正确”的做法是什么?
好吧,这似乎是可以理解的:
注意字体是如何变得模糊的,因为每次都会重新绘制字体。每次通话都会变得更糟。它不是压缩神器或任何东西。是的,因为这个数字没有正确重绘。
现在你可能会说:“嘿,然后就是不要更新完整的数字,而只是更新它的数据内容”就像它们here一样。这里的问题是,我不能再改变轴/图形属性了。以此为例axis_setters={'set_title': 'Title'}
我在开始时给了。如果我删除了第二个fig, ax = plt.subplots(**subplot_kw)
这个setter的调用不再做任何事情。添加fig.canvas.draw()
时也会出现同样的情况,但标题仍然无法显示。
编辑: 所以这几乎带给我:
import matplotlib.pyplot as plt
def plot_func(xdata, ydata, figure_kw={}, subplot_args=[111], subplot_kw={}, axis_setters=None):
fig = plt.figure(**figure_kw)
ax = fig.add_subplot(*subplot_args, **subplot_kw)
ax.cla()
if axis_setters:
for setter_name, setter_value in axis_setters.items():
setter_func = getattr(ax, setter_name)
setter_func(setter_value)
plot(xdata, ydata)
return fig, ax
并致电:
for i in range(50):
plot_func([1,2,3], [1,2,3], figure_kw={'num': 'name'}, axis_setters={'set_title': 'Title'})
有效,现在唯一的“问题”是:subplot_args=[111], subplot_kw={}
以任何方式将其合并为一个关键字。现在这只是为了方便起见,因为这就是我通过代码处理几乎所有其他关键字争论的方式,而且它只是很奇怪。
答案 0 :(得分:0)
这是更新图形的一些正确方法(如果它存在),否则创建一个新图形。请注意,图中的ZoneId.systemDefault()
参数应该是一个数字,否则无法检测该图是否已存在。
num