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

Julia中在for循环用plot!叠加曲线到直方图无显示的解决方法

解决直方图叠加曲线不显示的问题

核心问题排查与修复步骤

  1. 显式绑定绘图对象,避免隐式上下文错误
    不要依赖current()的隐式绘图上下文,直接创建并操作图对象,确保直方图和曲线都绑定到同一图中:
using Plots

# 显式创建直方图所在的图对象
p = histogram(d, bins=bins, xlabel="Distance", ylabel="Attenuation", xlims=(0, xmax), grid=true, alpha=0.7, normalize=true)

xf = LinRange(0, xmax, 100)                   
for l in 1:length(mus)                        
    xfl = xf .+ layer[l]
    xfl = xfl[xfl .<= layer[l+1]]
    # 跳过空数据的层,避免无效绘图
    isempty(xfl) && continue
    yfl = n[l] * mus[l] * exp.(-mus[l] .* (xfl .- layer[l]))
    # 明确指定叠加到p图,同时调整曲线样式增强可见性
    plot!(p, xfl, yfl, linewidth=2, color=:darkblue, label="Layer $l")
end

# 显式显示最终图形
display(p)
  1. 验证曲线数据的有效性
  • 检查数组长度匹配:length(mus)必须等于length(layer)-1,否则循环中layer[l+1]会索引越界,导致循环中断。
  • 确认数值范围匹配:打印yfl的最大/最小值,确保其与直方图的y轴(归一化后的概率密度)范围一致。若yfl过大或过小,调整n[l]取值(保证sum(n)≈1,和直方图的归一化逻辑对齐)。
  • 检查数据非空:如果xf .+ layer[l]全部大于layer[l+1],xfl会是空数组,此时该层无曲线可画,直接跳过即可。
  1. 避免current()的误用
    单独调用current()不会显示图形,反而可能因上下文切换丢失之前的直方图。即使要用,也需搭配display()(如display(current())),但显式绑定图对象的方式更稳定可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 15:32:51