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

Gnuplot直接导出PDF与Qt绘图后导出PDF结果不一致问题

Gnuplot filledcurves导出PDF时斜率异常问题

我尝试使用Gnuplot的filledcurves绘制包含分布均值及其标准差的图形,通过设置terminal为PDF来导出图形。但当分布数据点超出y轴显示范围[-100:100]时,发现曲线斜率异常;而先使用Qt绘图再手动导出为PDF时,结果却符合预期。

以下是最小可复现代码:

reset session

set terminal pdf
set output "~/MWE_results.pdf"

set yr[-100 : 100]

$Data <<EOD
40   0.000011           -0.002104            0.002126
20   0.240582           -4.877879            5.359043
10   0.926508           -9.378468           11.231484
5    4.794549          -19.298995           28.888093
2.5  84.993925        -6679.709571         6849.697422
1.25 6.220374        -3980.189531         3992.630280
EOD

set style fill transparent solid 0.1 

plot $Data u 1:2 w lp pt 7 lc rgb "black" ti "Mean value of my distribution", \
     $Data u 1:3:4 w filledcurves lc rgb "red" ti "Std devation"

unset output

unset term

直接导出PDF的结果中曲线斜率存在问题(已圈出异常部分),而Qt绘图后导出的PDF结果与数据一致。请问这是什么原因导致的?


问题原因

这是由于Gnuplot的PDF终端默认对超出坐标轴范围的数据点执行自动裁剪,但filledcurves在处理被裁剪的点时,会直接将裁剪后的点连接到坐标轴边界,而非遵循数据的实际趋势,进而导致斜率异常。而Qt终端的裁剪逻辑不同,它会保留数据的原始趋势,即使点超出显示范围,也会按照真实数据连接曲线,手动导出PDF时结果自然符合预期。

解决方法

方法一:禁用PDF终端的裁剪功能

在设置PDF终端时添加noclip参数,让Gnuplot保留所有数据点的原始位置:

set terminal pdf noclip

这样filledcurves会按照真实数据绘制曲线,导出的PDF结果将与Qt终端一致。

方法二:手动截断超出范围的数据点

如果希望保持坐标轴范围不变,同时避免曲线超出显示区域,可以使用clip函数将超出[-100,100]的数据点强制设置为边界值:

plot $Data u 1:2 w lp pt 7 lc rgb "black" ti "Mean value of my distribution", \
     $Data u 1:(clip($3,-100,100)):(clip($4,-100,100)) w filledcurves lc rgb "red" ti "Std devation"

这种方式能让曲线斜率保持合理,同时不会超出设定的y轴显示范围。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 12:35:30