如何将Matplotlib坐标轴设置为颜色映射(Colormap)而非单一颜色
用Matplotlib实现坐标轴的颜色映射样式
完全可以实现这种坐标轴渐变色彩的效果,核心思路是用带渐变边缘色的矩形补丁覆盖原有的单一颜色坐标轴,具体代码示例如下:
步骤1:导入依赖库
import matplotlib.pyplot as plt import numpy as np from matplotlib.patches import Rectangle
步骤2:创建基础绘图
先绘制常规的图表内容:
fig, ax = plt.subplots(figsize=(8, 6)) x = np.linspace(0, 10, 100) y = np.sin(x) ax.plot(x, y, color='black') # 设定坐标轴范围 ax.set_xlim(0, 10) ax.set_ylim(-1.2, 1.2)
步骤3:添加渐变坐标轴
处理底部X轴
# 选择颜色映射,这里用viridis,可替换为其他内置配色(如plasma、coolwarm) cmap = plt.get_cmap('viridis') # 获取原坐标轴的线宽,保证渐变矩形宽度匹配 line_width = ax.spines['bottom'].get_linewidth() # 创建覆盖X轴的渐变矩形 x_min, x_max = ax.get_xlim() y_min = ax.get_ylim()[0] x_axis_rect = Rectangle( (x_min, y_min - line_width * 2), # 矩形左下角坐标 x_max - x_min, # 矩形宽度 line_width * 4, # 矩形高度,适配轴的粗细 transform=ax.transData, zorder=0, # 让矩形在绘图内容下方 facecolor='none', edgecolor=cmap(np.linspace(0, 1, 100)) # 生成渐变边缘色 ) ax.add_patch(x_axis_rect) # 隐藏原有的单一颜色X轴 ax.spines['bottom'].set_visible(False)
处理左侧Y轴
y_min, y_max = ax.get_ylim() x_min = ax.get_xlim()[0] y_axis_rect = Rectangle( (x_min - line_width * 2, y_min), # 矩形左下角坐标 line_width * 4, # 矩形宽度 y_max - y_min, # 矩形高度 transform=ax.transData, zorder=0, facecolor='none', edgecolor=cmap(np.linspace(0, 1, 100)) ) ax.add_patch(y_axis_rect) # 隐藏原有的单一颜色Y轴 ax.spines['left'].set_visible(False)
步骤4:优化显示效果
确保刻度和标签显示在渐变轴上方:
ax.tick_params(axis='both', zorder=2) plt.show()
额外说明
- 若需要自定义渐变配色,可以用
LinearSegmentedColormap创建专属色卡 - 调整矩形的位置参数(如
line_width * 2)可以适配不同的轴粗细需求 - 顶部X轴或右侧Y轴的渐变效果,只需对应修改
ax.spines['top']或ax.spines['right']的相关代码即可
内容的提问来源于stack exchange,提问作者Apo
相关产品推荐
相关产品推荐

