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

如何使用Gadfly绘制n×n矩阵的热力图?

使用Gadfly绘制n×n矩阵热力图的正确方法

你之前的代码问题在于x和y坐标设置错误——直接用1:9会让每个矩形位置混乱重叠,无法形成矩阵网格。下面是两种可行的解决方案:

方法一:使用Geom.rectbin(推荐)

通过将矩阵转换为行列坐标+值的格式,配合离散刻度对齐,就能得到规整的网格热力图:

using Gadfly

# 生成n×n矩阵(以3×3为例)
n = 3
a = rand(n, n)

# 生成每个元素对应的行、列坐标和值
rows = repeat(1:n, inner=n)  # 行号:重复1-3各3次
cols = repeat(1:n, outer=n)  # 列号:连续1-3重复3轮
values = vec(a)              # 矩阵展平为一维数组

# 绘制热力图
plot(
    x=cols, y=rows, color=values,
    Geom.rectbin,
    # 设置离散刻度,对齐矩阵行列
    Scale.x_discrete(levels=1:n),
    Scale.y_discrete(levels=1:n),
    # 配置主题,添加网格和边框
    Theme(
        panel_stroke=colorant"black",  # 面板边框
        grid_color=colorant"black",    # 网格线颜色
        grid_line_width=0.5pt          # 网格线粗细
    ),
    Guide.xlabel("列"), Guide.ylabel("行"), Guide.colorkey("数值")
)

方法二:使用Geom.rect

手动指定每个矩形的边界(xmin/xmax、ymin/ymax),也能实现相同效果:

using Gadfly

n = 3
a = rand(n, n)

rows = repeat(1:n, inner=n)
cols = repeat(1:n, outer=n)
values = vec(a)

plot(
    # 每个矩形的边界:行列号±0.5
    xmin=cols .- 0.5, xmax=cols .+ 0.5,
    ymin=rows .- 0.5, ymax=rows .+ 0.5,
    color=values,
    Geom.rect,
    # 设置坐标范围,让矩阵居中显示
    Scale.x_continuous(limits=(0, n+1)),
    Scale.y_continuous(limits=(0, n+1)),
    Theme(panel_stroke=colorant"black"),
    Guide.xlabel("列"), Guide.ylabel("行"), Guide.colorkey("数值")
)

关键说明

  • 核心是让每个矩阵元素对应唯一的(row, col)坐标,而不是用连续的1:9这类无意义的位置值。
  • 两种方法都能生成规整的网格热力图,rectbin更适合离散坐标场景,代码更简洁;rect则能更灵活控制矩形的大小和位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:55:18