我正在绘制微分方程求解器(边界值问题)的进度图。每次迭代都会产生一组完整的函数评估f(x),然后可以针对x进行绘制。在达到收敛之前,每个图(据说)比最后一个图更接近正确的解。顺序色图用于使较早的图形褪色而使较后的图形饱和。

当预定迭代次数时,这可以很好地工作:

import matplotlib.pyplot as plt

ax = plt.subplot(111)
cm = plt.get_cmap('OrRd')
ax.set_color_cycle([cm(1.*i/(iter+1)) for i in range(1,iter+2)])

ax.plot(x,y)
for k in range(iter):
    # iterative solve
    ax.plot(x,y)

但是,如果我使用收敛标准而不是预定的迭代次数,则将无法事先set_color_cycle。将那条线放在循环后面是行不通的。

我知道只有在达到收敛后才能存储中间结果和图,但这使我措手不及,因为除了在图上看到它们之外,我实际上对所有中间结果都没有用。

所以这是我的问题:
1.绘制后如何更改现有图形的颜色图? (在MATLAB中这很容易。)
2.如何在不影响第一个集合的情况下,使用同一图上的另一个图集合(例如从不同的初始猜测,收敛到不同的解决方案)做同样的事情,以使两个颜色图将这些集合彼此区分开。 (这对于问题1的答案应该是显而易见的,但以防万一。)

非常感谢。

最佳答案

使用update_colors()更新所有行的颜色:

import pylab as pl
import numpy as np
cm = pl.get_cmap('OrRd')

x = np.linspace(0, 1, 100)

def update_colors(ax):
    lines = ax.lines
    colors = cm(np.linspace(0, 1, len(lines)))
    for line, c in zip(lines, colors):
        line.set_color(c)

fig, ax = pl.subplots()
for i in range(10):
    ax.plot(x, x**(1+i*0.1))
    update_colors(ax)

关于python - Matplotlib:事实结束后更改颜色图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20040597/

10-10 22:32