bon*_*ang 7 python plot colors matplotlib
我正在绘制微分方程求解器(边界值问题)的进展.每次迭代产生一组完整的函数评估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)
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用收敛标准而不是预定次数的迭代,我将无法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)
Run Code Online (Sandbox Code Playgroud)
您还可以使用plt.set_cmap,请参阅此处或(更详细地说,向下滚动)此处:
import numpy as np
import matplotlib.pyplot as plt
plt.imshow(np.random.random((10,10)), cmap='magma')
plt.colorbar()
plt.set_cmap('viridis')
Run Code Online (Sandbox Code Playgroud)