如何使用 matplotlib 绘制一条 xy 线,该线具有取决于第三个变量 z 的填充颜色?(其中 z 与 x 和 y 的长度相同)。
我想要这样的东西:
我得到了什么:
示例代码如下所示:
import numpy as np
import matplotlib.pyplot as plt
cm = plt.get_cmap('gist_rainbow')
x = np.linspace(0, 10, 100)
y = np.sin(x) + 1.3
z = 0.5*(np.cos(x) + 1.0)
fig = plt.figure(111)
ax = plt.axes(xlim=(0.0, 10.0), ylim=(0.0, 3.0))
line, = ax.plot([], [], lw=2)
line.set_data(x, y)
ax.fill_between(x, y, interpolate=True, color= cm(z))
plt.show()
Run Code Online (Sandbox Code Playgroud)
我试过有和没有,interpolate=True但在这里没有区别。
扫描了类似的问题/答案,但没有找到任何可以帮助我解决此问题的内容。任何建议将不胜感激。
与imshow() 和设定x的曲线作为水平程度,可以得出一个正确地着色矩形覆盖曲线。该图像可以使用由fill_between().
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import PathPatch
cmap = plt.get_cmap('gist_rainbow')
x = np.linspace(0, 10, 100)
y = np.sin(x) + 1.3
z = 0.5 * (np.cos(x) + 1.0)
fig, ax = plt.subplots()
ax.set_xlim(0.0, 10.0)
ax.set_ylim(0.0, 3.0)
ax.plot(x, y, lw=2)
poly = ax.fill_between(x, 0, y, color='none')
img = ax.imshow(z.reshape(1, -1), extent=[x[0], x[-1], 0, y.max()], cmap=cmap, aspect='auto', interpolation='bilinear')
clip_poly = PathPatch(poly.get_paths()[0], transform=ax.transData)
img.set_clip_path(clip_poly)
plt.colorbar(img, ax=ax)
plt.tight_layout()
plt.show()
Run Code Online (Sandbox Code Playgroud)