You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使等高线图(contour-plot)与颜色条(colorbar)高度匹配?含保持颜色条尺寸不变放大等高线图的技术问询

嘿,我来帮你搞定Matplotlib里等高线图(contour plot)和颜色条(colorbar)高度匹配的两个问题,直接上实操方案!

需求一:调整等高线图高度,使其与颜色条高度完全匹配

如果你的颜色条已经存在,想要让等高线图的高度和它对齐,咱们可以通过获取颜色条轴的位置参数手动调整,或者用工具让两者自动对齐——后者更省心,完全没误差。

自动对齐方案(推荐)

make_axes_locatable工具,它能从主轴(等高线图的轴)衍生出高度完全一致的颜色条轴:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable

# 生成示例数据
x, y = np.meshgrid(np.linspace(-2, 2, 100), np.linspace(-2, 2, 100))
z = np.sin(np.sqrt(x**2 + y**2))

# 创建画布和主坐标轴
fig, ax = plt.subplots(figsize=(8, 6))
# 画等高线填充图
im = ax.contourf(x, y, z, levels=20, cmap='viridis')

# 关键步骤:分割主轴,创建匹配高度的颜色条轴
divider = make_axes_locatable(ax)
# "right"表示颜色条在右侧,size是宽度比例,pad是间距
cax = divider.append_axes("right", size="5%", pad=0.05)
# 绑定颜色条到新轴
plt.colorbar(im, cax=cax)

plt.tight_layout()
plt.show()

这样生成的颜色条高度会和等高线图严丝合缝,根本不用手动调!

手动调整方案(针对已存在的颜色条)

如果图已经画好,颜色条和等高线图高度不一致,可以直接获取两者的轴位置参数调整:

# 假设已经有fig, ax(等高线图轴)和cbar(颜色条对象)
cbar_ax = cbar.ax
# 获取颜色条轴的位置:[left, bottom, width, height]
cbar_pos = cbar_ax.get_position()
# 获取等高线图轴的位置
ax_pos = ax.get_position()
# 调整等高线图轴的垂直位置和高度,与颜色条对齐
new_ax_pos = [ax_pos.x0, cbar_pos.y0, ax_pos.width, cbar_pos.height]
ax.set_position(new_ax_pos)

plt.show()
需求二:维持颜色条尺寸不变,放大等高线图匹配高度

这个需求的核心是先固定颜色条的尺寸,再反向调整等高线图的轴高度,让它和颜色条对齐。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

# 生成示例数据
x, y = np.meshgrid(np.linspace(-2, 2, 100), np.linspace(-2, 2, 100))
z = np.sin(np.sqrt(x**2 + y**2))

# 创建画布,用gridspec固定颜色条的尺寸
fig = plt.figure(figsize=(8, 6))
gs = gridspec.GridSpec(1, 2, width_ratios=[10, 1])
# 创建等高线图轴
ax = fig.add_subplot(gs[0])
# 创建颜色条轴(位置固定,后续不修改)
cax = fig.add_subplot(gs[1])

# 画等高线图
im = ax.contourf(x, y, z, levels=20, cmap='viridis')
# 绑定颜色条到固定轴
cbar = plt.colorbar(im, cax=cax)

# 获取颜色条轴的高度
cbar_height = cax.get_position().height
# 调整等高线图轴的垂直位置和高度,与颜色条匹配
ax_pos = ax.get_position()
new_ax_pos = [ax_pos.x0, cax.get_position().y0, ax_pos.width, cbar_height]
ax.set_position(new_ax_pos)

plt.tight_layout()
plt.show()

这里先通过gridspec固定了颜色条的尺寸,再把等高线图轴的高度和垂直位置调整到和颜色条完全一致,完美实现“维持颜色条尺寸不变,放大等高线图匹配高度”的需求。


内容的提问来源于stack exchange,提问作者Angie Design

火山引擎 最新活动