创建动画时出现重复的颜色条

2 投票
2 回答
3025 浏览
提问于 2025-04-16 12:55

我刚开始接触matplotlib这个库。当我用循环生成一系列的等高线填充图(contourf图)时,matplotlib会生成n个重复的颜色条(颜色条的范围是固定的)。

我是不是需要在每次循环中销毁旧的颜色条?如果是的话,我该怎么做呢?

更新:

好的,但如果我为一个等高线填充图生成了颜色条,我该如何确保整个范围都被包含在内?我试过使用“clip=False”和extend='both'。

c_scale = matplotlib.colors.Normalize(vmin=0, vmax=1,clip=False)
cbar = plt.colorbar(cmap=plt.cm.jet,norm=c_scale,shrink=0.5,extend='both')

2 个回答

1

如果你想要不断更新图中的颜色条和其他内容,最开始就要用 plt.ion() 来开启交互式绘图。然后可以结合使用 plt.draw() 和 plt.clf() 来持续更新图表。

import matplotlib.pyplot as plt
import numpy as np

plt.ion(); plt.figure(1);
for k in range(10):
    plt.clf(); plt.subplot(121);
    plt.contourf(np.random.randn(10,10)); plt.colorbar();
    plt.subplot(122,polar=True)
    plt.contourf(np.random.randn(10,10)); plt.colorbar();
    plt.draw();

需要注意的是,这种方法适用于包含不同子图和各种类型图表的图形(比如极坐标图或直角坐标图)。

1

contourf这个函数本身不会生成颜色条,颜色条是由colorbar这个函数来生成的。

如果颜色条的范围是固定的,你可以在一开始调用一次colorbar(),然后再画新的contourf图的时候就不需要再调用colorbar()了。

下面是一个例子:

#In which we make contourplots with just one colorbar

import matplotlib.pyplot as plt
import numpy as np

plt.figure(1)
plt.clf()
plt.contourf(np.random.random((10,10)))
plt.colorbar()
for k in xrange(10):
    plt.contourf(np.random.random((10,10)))
plt.show()

撰写回答