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

如何解决Julia对数刻度绘制大误差棒时的No strict ticks found报错

问题原因与解决办法

报错原因

当error_amplitude=1.0时,误差棒的下限会变成y - error = y*(1-1.0) = 0,而对数刻度依赖对数函数,log(0)无意义(趋近于负无穷),绘图库无法为包含0的y轴范围生成有效的严格对数刻度,因此抛出"No strict ticks found"错误。而error_amplitude=0.5时,下限是0.5y,始终大于0,所以能正常生成刻度。

解决办法

1. 修正误差下限,避免非正值

手动将误差棒的下限限制在一个极小的正数(比如1e-10),确保所有y值范围都在对数函数的有效定义域内:

using Plots

x = 1:10
y = x .^ (-2)  # Power law y = x^(-2)

error_amplitude = 1.0
error = y .* error_amplitude
# 把下限设为不小于1e-10,避免log(0)
lower_bound = max.(y .- error, 1e-10)
upper_bound = y .+ error

# 用元组传递不对称的误差范围(下限偏差、上限偏差)
plot(x, y, xaxis=:log, yaxis=:log, ribbon=(y .- lower_bound, upper_bound .- y), legend=false)

2. 改用对数转换后的数据绘图

先对y值和误差做对数转换,再用线性刻度绘图,本质上和对数刻度效果一致,还能避开0的问题:

using Plots

x = 1:10
y = x .^ (-2)
log_y = log10.(y)

error_amplitude = 1.0
error = y .* error_amplitude
# 计算对数空间的误差范围
log_lower = log10.(max.(y .- error, 1e-10))
log_upper = log10.(y .+ error)

plot(x, log_y, xaxis=:log, yaxis=("log(y)", :linear), ribbon=(log_y .- log_lower, log_upper .- log_y), legend=false)

3. 使用不对称误差定义

如果实际场景中误差的上下限本来就不对称,可以直接指定上下误差的具体值,确保下限始终大于0:

using Plots

x = 1:10
y = x .^ (-2)

# 自定义上下误差,比如上限用1.0倍y,下限用0.9倍y(避免到0)
upper_error = y .* 1.0
lower_error = y .* 0.9

plot(x, y, xaxis=:log, yaxis=:log, ribbon=(lower_error, upper_error), legend=false)

内容的提问来源于stack exchange,提问作者João Vitor Vieira Flauzino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 17:23:13