在Makie.jl中如何为密度图的中间50%区间着色?
给CairoMakie密度图的中间50%区域着色
要给密度图的中间50%区域(即四分位距IQR,Q1到Q3区间)着色,你需要先计算数据的四分位数,再提取密度曲线的坐标数据,最后用填充工具绘制指定区间的色块。以下是完整实现代码:
using CairoMakie, Statistics # 生成随机正态分布数据 data = randn(200) # 计算四分位数Q1和Q3 q1, q3 = quantile(data, [0.25, 0.75]) # 创建绘图对象 f = Figure() ax = Axis(f[1, 1], title = "密度图(中间50%区域着色)") # 绘制密度曲线并获取其坐标数据 dens_plot = density!(data, color = :darkblue, linewidth = 2) x_dens = dens_plot[1][] y_dens = dens_plot[2][] # 筛选出Q1到Q3之间的坐标点 mask = (x_dens .>= q1) .& (x_dens .<= q3) x_masked = x_dens[mask] y_masked = y_dens[mask] # 用band!填充中间区域,设置半透明蓝色 band!(ax, x_masked, zeros(length(x_masked)), y_masked, color = (:lightblue, 0.5)) # 把密度曲线放在最上层,避免被填充色块遮挡 translate!(dens_plot, 0, 0, 1) f
关键步骤说明:
- 计算四分位数:用
Statistics包的quantile函数直接获取数据的25%和75%分位数,对应中间50%的区间。 - 提取密度曲线数据:调用
density!后返回的对象包含曲线的x、y坐标,通过[]可以取出这些数组。 - 填充区域:使用
band!函数绘制从x轴(y=0)到密度曲线的填充区域,通过color参数设置颜色和透明度。 - 层级调整:用
translate!把密度曲线的z轴位置设为1,确保它显示在填充色块上方。
你可以根据需求调整填充色的color参数,比如换成(:cornflowerblue, 0.6)来改变颜色和透明度。
内容的提问来源于stack exchange,提问作者Alec
相关产品推荐
相关产品推荐

