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

Plots.jl中heatmap绘制矩阵无法保留原始方向的解决方法

Plots.jl heatmap绘制矩阵朝向异常解决方案

问题复现

使用Plots.jl的heatmap函数绘制灰度像素网格时,函数默认不会保留输入矩阵的原始视觉朝向,会对矩阵做垂直反射变换,复现代码如下:

using Random, Plots

mymatrix = zeros(Int, (5,5))
mymatrix[1,1] = 1

# 此时mymatrix的第一行第一列值为1,其余位置为0
# REPL打印时1出现在矩阵左上角位置
mymatrix
#=
5x5 Matrix{Int64}:
 1  0  0  0  0
 0  0  0  0  0
 0  0  0  0  0
 0  0  0  0  0
 0  0  0  0  0
=#

heatmap(mymatrix, color = :greys)

运行上述代码得到的可视化结果中,值为1的像素点出现在左下角位置,和矩阵打印的视觉顺序不一致:
二值矩阵heatmap默认绘制结果
经多组测试确认,该现象是heatmap默认的y轴渲染规则导致,查阅官方文档未找到明确的行为说明,需要无需修改原始输入矩阵的修正方案。

解决方法

  • 单次绘图传参(推荐):heatmap原生支持yflip参数,传入yflip=true即可在渲染时翻转y轴方向,完全抵消默认的垂直反射效果,不需要对原始矩阵做任何修改:
    heatmap(mymatrix, color = :greys, yflip = true)
    
    使用该参数后,矩阵的索引和渲染位置完全对应:矩阵[i,j]位置的元素会显示在图中第i行、第j列的位置,和REPL打印矩阵的视觉顺序完全一致,[1,1]位置的元素会出现在图的左上角。
  • 设置全局默认参数:如果需要批量绘制矩阵,不想每次调用heatmap都传参,可以在绘图代码开头设置全局默认值:
    using Plots
    default(yflip = true)
    
    # 后续所有heatmap调用都会默认开启y轴翻转
    heatmap(mymatrix, color = :greys)
    

原因说明

该现象不是函数bug,是坐标系默认规则的差异:

  • Plots的heatmap默认遵循标准笛卡尔坐标系规则,y轴数值从下到上递增
  • 文本打印矩阵时,行号从上到下递增,两者y轴方向刚好相反,因此会出现视觉上的垂直反射效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:39:15