You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matplotlib散点直方图绘图中新增右下角自定义坐标轴

如何为散点边缘直方图新增右下角对齐坐标轴

问题描述

基于matplotlib axes_grid1 模块实现的散点+边缘直方图案例,原始运行效果如下:
原始散点直方图效果
原始实现代码如下:

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

# 固定随机种子保证可复现
np.random.seed(19680801)
# 生成随机测试数据
x = np.random.randn(1000)
y = np.random.randn(1000)
fig, axScatter = plt.subplots(figsize=(5.5, 5.5))

# 绘制主散点图
axScatter.scatter(x, y)
axScatter.set_aspect(1.)

# 在当前坐标轴的顶部、右侧创建新坐标轴放置直方图
# new_vertical/new_horizontal 方法的第一个参数为待创建坐标轴的英寸高度/宽度
divider = make_axes_locatable(axScatter)
axHistx = divider.append_axes("top", 1.2, pad=0.1, sharex=axScatter)
axHisty = divider.append_axes("right", 1.2, pad=0.1, sharey=axScatter)

# 隐藏共享轴多余的刻度标签
axHistx.xaxis.set_tick_params(labelbottom=False)
axHisty.yaxis.set_tick_params(labelleft=False)

# 手动计算直方图分箱边界
binwidth = 0.25
xymax = max(np.max(np.abs(x)), np.max(np.abs(y)))
lim = (int(xymax/binwidth) + 1)*binwidth

bins = np.arange(-lim, lim + binwidth, binwidth)
axHistx.hist(x, bins=bins)
axHisty.hist(y, bins=bins, orientation='horizontal')

# 设置直方图刻度
axHistx.set_yticks([0, 50, 100])
axHisty.set_xticks([0, 50, 100])

plt.draw()
plt.show()

目标是在布局右下角新增坐标轴,实现对齐效果如下:
预期布局效果
直接使用ax_cnr = divider.append_axes("right", 1.2, pad=0.1)会在现有右侧直方图的外侧追加新轴,无法落到右下角空位。

解决方法

不要基于主散点轴的分割器追加同方向的新轴,转而基于已经创建好的右侧直方图的分割器,向底部追加尺寸匹配的坐标轴,即可自动对齐到右下角空位。
在原始代码创建完axHisty的代码行之后,插入如下代码即可:

# 基于右侧直方图的布局分割器,向底部追加坐标轴
corner_divider = make_axes_locatable(axHisty)
ax_corner = corner_divider.append_axes("bottom", 1.2, pad=0.1)
# 隐藏角落轴的刻度标签,和整体布局风格匹配
ax_corner.tick_params(labelbottom=False, labelleft=False)
# 如果不需要在角落轴显示内容,可直接关闭坐标轴显示
ax_corner.axis('off')

关键参数说明

  • 追加轴的高度设置为1.2,和顶部直方图的高度完全一致,保证纵向对齐
  • 边距pad=0.1和其他轴的边距保持一致,不会出现布局错位
  • 追加的轴宽度自动和右侧直方图保持一致,不需要手动设置尺寸
    如果需要在右下角轴放置自定义内容(比如统计指标、图例、注释),去掉ax_corner.axis('off')这行,正常调用绘图API即可。

内容的提问来源于stack exchange,提问作者Wind Circulation

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:27:20