为什么颜色条会改变循环图纸中的颜色? (matplotlib)

时间:2017-10-31 10:44:44

标签: python matplotlib

每次当条形图绘制时,它们会随机改变颜色。为什么? 这是什么原因?

import matplotlib.pyplot as plt
from matplotlib import mlab
fig = plt.figure()

ax4 = fig.add_subplot(111)
ax4.set_xlim(-10,80)
ax4.set_ylim(0,30)

def view(ylist):

    xmin = 0
    xmax = 70.0
    dx = 10
    xlist = mlab.frange (xmin, xmax, dx)

    ax4.bar(xlist, ylist, dx)
    plt.pause(0.5)
    plt.draw()

ylist = [0 for p in range(8)]
for i in range(10):
    view(ylist)
    ylist[0] +=1
    ylist[3] +=2

plt.close()  

在运行代码时 - 条形图在循环中改变颜色。为什么? 问题是 - 怎么回事?

1 个答案:

答案 0 :(得分:1)

问题在于您正在绘制10个不同的条形图,所有条形图都在同一轴上。您的条形图被绘制在相同的x坐标处,因此被绘制在彼此的顶部。这仍然意味着您的其他条形图仍然存在,因此matplotlib会循环绘制“新”条形图的颜色。

你可以做两件事。首先,您可以调用plt.cla()来清除当前轴。然而,这将重置y轴限制(这使得它看起来没有什么事情发生)。这意味着您必须使用ax4.set_ylim(0,20)设置y轴限制。

其次,你可以在ax4.bar()中指定你想要的条形颜色(虽然这仍然是在旧条上绘图)。

import matplotlib.pyplot as plt
from matplotlib import mlab

fig = plt.figure()

ax4 = fig.add_subplot(111)
ax4.set_xlim(-10,80)
ax4.set_ylim(0,30)

def view(ylist):

    xmin = 0
    xmax = 70.0
    dx = 10
    xlist = mlab.frange (xmin, xmax, dx)

    plt.cla()
    ax4.set_ylim(0,20)
    ax4.bar(xlist, ylist, dx)  # can add color="blue" if you don't want to use plt.cla()
    plt.pause(0.5)
    plt.draw()

ylist = [0 for p in range(8)]
for i in range(10):
    view(ylist)
    ylist[0] +=1
    ylist[3] +=2

plt.close()