我正在绘制微分方程求解器(边界值问题)的进度图。每次迭代都会产生一组完整的函数评估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/