Python 如何用随坡度变化的颜色填充线形图?

Python 如何用随坡度变化的颜色填充线形图?,python,matplotlib,Python,Matplotlib,我想画一个像这样的图(立面图): 在这里,他们绘制的是海拔与距离的关系图,图形下方的区域由坡度(即,dElevation/dx)着色。红色是正斜率,绿色是平缓的,蓝色是负斜率 如果我有x和高程,计算坡度(deleveration/dx)很容易,但我很难用随坡度变化的颜色填充图形。主要是使用并稍微调整它使这成为可能: import numpy as np import matplotlib.pyplot as plt from matplotlib.path import Path from m

我想画一个像这样的图(立面图):

在这里,他们绘制的是海拔与距离的关系图,图形下方的区域由坡度(即,dElevation/dx)着色。红色是正斜率,绿色是平缓的,蓝色是负斜率

如果我有x和高程,计算坡度(deleveration/dx)很容易,但我很难用随坡度变化的颜色填充图形。

主要是使用并稍微调整它使这成为可能:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.path import Path
from matplotlib.patches import PathPatch

x = np.arange(0,10,0.1)
y = 0.5*np.sin(x)+0.6
grad = np.gradient(y)
elevation_origin = -0.05 # set the zero line until which the color map is filled in. 

fig,ax = plt.subplots(1,1)
ax.plot(x, y, label='Elevation')

path = Path(np.array([np.append(x,x[::-1]), np.append(y,np.zeros_like(y))]).T)
patch = PathPatch(path, facecolor='none')
ax.add_patch(patch)
im = plt.imshow(grad.reshape(1,y.size), cmap=plt.cm.jet, interpolation='bicubic',                                        
                extent=[x[0], x[-1], elevation_origin, np.max(y)],aspect='auto',               
                clip_path=patch, clip_on=True)     
plt.show()

当然,如果需要,您可以选择不同的颜色贴图,但是
jet
应该与示例图片相匹配。请注意,如果在
高程\原点
下方有高程,则需要修改此方法。还请注意,这是可以通过网络搜索找到的(至少是大部分)。

我只想与大家分享上述答案的另一个版本

而不是:

im = plt.imshow(grad.reshape(1,y.size), cmap=plt.cm.jet, interpolation='bicubic',                                        
                extent=[x[0], x[-1], elevation_origin, np.max(y)],aspect='auto',               
                clip_path=patch, clip_on=True)    
我用过:


cmap = mpl.cm.bwr
normalize = mpl.colors.Normalize(vmin=np.min(grad), vmax=np.max(grad))
for i in range(0,100):
    plt.fill_between(x=x[i-1:i+1],y1=y[i-1:i+1],y2=0, color=cmap(normalize(grad[i]))) 

谢谢你的帮助。这太完美了。我试图使用
plt.fill\u在
之间完成这项工作,但在这一过程中遇到了一些困难。有时,我们的noob不知道要搜索的正确术语(不要认为我没有先搜索就在这里发布了)。我的第一次尝试也包括了
fill\u-between
:很多时候人们都知道,我只是留下了一条评论,但这并不明显,是的。如果这回答了你的问题,请接受答案:)阅读为什么“jet”通常不是合适的颜色映射。在这种情况下,其中一个可能更合适。谢谢,我实际上可能会对此进行更深入的研究。我从不使用jet,因为我有审美偏好,也不知道整个互联网都讨厌它:D只是从问题中的图片中采纳的。你的回答肯定是对链接参考的创造性解释。顺便说一下,
plt.ylim(0,y.max()*1.1)
可能有助于更好地定位图形。