如何在两条竖线间实现从左到右的红蓝水平颜色渐变?
问题
我想在绘图的两条竖线之间制作红-蓝颜色渐变,渐变方向为水平。我的两条线包含x(d180)和y(剖面高度)数据:
x1 y1 0 -0.828533 -51.0 3 -0.545964 -16.0 5 -0.761425 -20.0 6 -0.580972 -3.0 8 -0.854383 -162.0 12 -1.364880 -251.0 13 -1.244032 -261.0 18 -0.748652 -305.0 38 -1.300000 -600.0 39 -1.742075 -932.0 and x2 y2 1 -1.309039 -51.0 2 -0.582214 -16.0 4 -1.129269 -20.0 7 -0.974811 -3.0 9 -0.957930 -162.0 10 -1.418976 -251.0 14 -1.664210 -261.0 20 -2.530322 -315.0 37 -1.630000 -600.0 41 -2.291032 -932.0
我尝试使用fill_betweenx创建空多边形并填充,但渐变方向为垂直而非水平,代码如下:
cm1 = LinearSegmentedColormap.from_list('Temperature Map', ['blue', 'red']) polygon = plt.fill_betweenx(y2,x1,x2, lw=0, color='none') verts = np.vstack([p.vertices for p in polygon.get_paths()]) gradient = plt.imshow(np.linspace(0, 1, 256).reshape(-1, 1), cmap=cm1, aspect='auto', origin='upper', extent=[verts[:, 0].min(), verts[:, 0].max(), verts[:, 1].min(), verts[:, 1].max()]) gradient.set_clip_path(polygon.get_paths()[0], transform=plt.gca().transData)
请问如何让渐变方向改为从左到右?
解决方案
问题出在渐变数组的形状上——np.linspace(0,1,256).reshape(-1,1)是垂直方向的一维数组,导致imshow渲染出垂直渐变。要改成水平渐变,只需将数组调整为水平形状,也就是reshape(1, -1),这样渐变会沿x轴从左到右(从0到1)映射。
修改后的完整代码如下:
import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import LinearSegmentedColormap # 假设x1、y1、x2、y2数据已加载完成 cm1 = LinearSegmentedColormap.from_list('Temperature Map', ['blue', 'red']) polygon = plt.fill_betweenx(y2, x1, x2, lw=0, color='none') verts = np.vstack([p.vertices for p in polygon.get_paths()]) # 关键修改:将渐变数组改为水平形状(1, 256) gradient_array = np.linspace(0, 1, 256).reshape(1, -1) gradient = plt.imshow(gradient_array, cmap=cm1, aspect='auto', origin='upper', extent=[verts[:, 0].min(), verts[:, 0].max(), verts[:, 1].min(), verts[:, 1].max()]) gradient.set_clip_path(polygon.get_paths()[0], transform=plt.gca().transData) plt.gca().invert_yaxis() # 可选:如果y轴数值向下增大,反转后更符合剖面绘图的视觉习惯 plt.show()
额外补充两点:
- 若你的y轴数值随高度增加而向下增大(比如从-51到-932),添加
plt.gca().invert_yaxis()可让高度从上到下递减,符合常规剖面展示逻辑。 - 若渐变方向与预期相反(比如红在左蓝在右),只需调换
['blue', 'red']的顺序即可。
内容的提问来源于stack exchange,提问作者Decono
相关产品推荐
相关产品推荐

