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

如何在轴关联状态下修复散点图的1:1纵横比?

解决散点图边缘密度图的轴相等问题

需求:制作带边缘密度图的散点图,要求散点图x、y轴范围固定为[-4,4]且纵横比为1,但现有代码无法实现轴视觉长度相等的效果。

现有代码(接近需求但轴不等):

using CairoMakie

n = 3000
r = randn(2,3000)
x = @view r[1,:]
y = @view r[2,:]

fig = Figure(resolution = (1000, 1000), font = "sans", fontsize = 20)
ax1 = (Axis(fig[1, 1]))
density!(ax1, y; bins = 20, color = :orange, strokewidth = 1,
    strokecolor = :black, label = "20 bins", aspect=1)

ax3 = Axis(fig[2, 1]; xlabel = "value", ylabel = "value")
ax4 = Axis(fig[2, 2]; xlabel = "value", ylabel = "counts")
scatter!(ax3, x, y; markersize = 4, color = :black,label="samples")
axislegend(ax3; position = :rt)

density!(ax4, x; label = "default",direction=:y)
rowsize!(fig.layout, 2, Auto(3))
colsize!(fig.layout, 1, Auto(3))
xlims!(ax3,-4,4)
ylims!(ax3,-4,4)
linkxaxes!(ax1, ax3)
linkyaxes!(ax3, ax4)

fig

当前问题:散点图的x、y轴视觉长度不相等,不符合1:1纵横比要求。


修改后的代码(实现轴相等+正确布局)

using CairoMakie

n = 3000
r = randn(2,3000)
x = @view r[1,:]
y = @view r[2,:]

fig = Figure(resolution = (1000, 1000), font = "sans", fontsize = 20)

# 上方y轴密度图
ax1 = Axis(fig[1, 1], ylabelvisible=false, xticklabelsvisible=false)
density!(ax1, y; bins=20, color=:orange, strokewidth=1, strokecolor=:black, label="20 bins")
xlims!(ax1, -4, 4)  # 和散点图y轴范围对齐

# 散点图(核心,强制纵横比1:1)
ax3 = Axis(fig[2, 1]; xlabel="value", ylabel="value", aspect=1)
scatter!(ax3, x, y; markersize=4, color=:black, label="samples")
axislegend(ax3; position=:rt)
xlims!(ax3, -4, 4)
ylims!(ax3, -4, 4)

# 右侧x轴密度图
ax4 = Axis(fig[2, 2], xlabelvisible=false, yticklabelsvisible=false)
density!(ax4, x; label="default", direction=:y)
ylims!(ax4, -4, 4)  # 和散点图x轴范围对齐

# 布局尺寸调整:让散点图区域占主要空间,密度图区域适配
rowsize!(fig.layout, 1, Relative(0.2))  # 上方密度图占20%高度
rowsize!(fig.layout, 2, Relative(0.8))  # 散点图占80%高度
colsize!(fig.layout, 1, Relative(0.8))  # 散点图占80%宽度
colsize!(fig.layout, 2, Relative(0.2))  # 右侧密度图占20%宽度

# 关联轴确保范围同步
linkyaxes!(ax1, ax3)
linkxaxes!(ax3, ax4)

fig

关键修改点说明

  • 给散点图轴ax3设置aspect=1,强制x、y轴视觉长度1:1
  • 用Relative设置布局的行/列尺寸,精准控制各区域占比,避免Auto尺寸的不确定性
  • 手动对齐密度图和散点图的轴范围,确保边缘密度图的范围和散点图一致
  • 隐藏密度图的冗余轴标签/刻度,让布局更简洁美观
  • 修正轴关联逻辑:上方密度图关联散点图的y轴,右侧密度图关联散点图的x轴,确保范围同步

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:30:57