Gnuplot绘制XYZ数据热图及930等值线异常问题求助
Gnuplot热图绘制问题解决
问题背景
使用Gnuplot绘制XYZ格式规则网格数据的热图,希望得到平滑完整的热图效果并叠加930值的等值线,但当前绘制结果存在网格状分割瑕疵,不符合预期。此前未使用dgrid3d时可正常绘制,此次因终端提示需要网格添加该命令后出现问题。
数据文件(mapa-estabilidad.dat)
0.0 40.0 778.78120008990152 0.0 50.0 821.24320411182714 0.0 60.0 857.79241694261157 0.0 70.0 890.06020449693267 0.0 80.0 919.06296578423655 0.0 90.0 945.48354694661066 0.0 100.0 969.80332391358638 0.0 110.0 992.37626201962348 0.0 120.0 1013.4707848548982 0.05 40.0 785.04802668734237 0.05 50.0 827.79005910832893 0.05 60.0 864.58649509875329 0.05 70.0 897.07636244554294 0.05 80.0 926.28161433212620 0.05 90.0 952.88868104300536 0.05 100.0 977.38301140737394 0.05 110.0 1000.1186127099754 0.05 120.0 1021.3660770787799 0.10 40.0 791.56182397211330 0.10 50.0 834.59556080405616 0.10 60.0 871.64949898510815 0.10 70.0 904.37004417201081 0.10 80.0 933.78677335142288 0.10 90.0 960.58855081404715 0.10 100.0 985.26351347238995 0.10 110.0 1008.1684300336018 0.10 120.0 1029.5754781163455 0.15 40.0 798.34055165487189 0.15 50.0 841.67824576244413 0.15 60.0 878.99958975502966 0.15 70.0 911.96168205893628 0.15 80.0 941.59893813600002 0.15 90.0 968.60362899084521 0.15 100.0 993.46744258593492 0.15 110.0 1016.5494213690502 0.15 120.0 1038.1233581496806 0.20 40.0 805.40555242206403 0.20 50.0 849.05987797369721 0.20 60.0 886.66147827497946 0.20 70.0 919.87499517151218 0.20 80.0 949.74215716287370 0.20 90.0 976.95914263993404 0.20 100.0 1002.0199820137157 0.20 110.0 1025.2868349030709 0.20 120.0 1047.0347386927497 0.25 40.0 812.77839951944816 0.25 50.0 856.76373305819050 0.25 60.0 894.65807150159071 0.25 70.0 928.13559296367407 0.25 80.0 958.24231762800366 0.25 90.0 985.68181901109608 0.25 100.0 1010.9489001030934 0.25 110.0 1034.4096229335219 0.25 120.0 1056.3396102939134 0.30 40.0 820.48532442240912 0.30 50.0 864.81721193165276 0.30 60.0 903.01793306626575 0.30 70.0 936.77143987457748 0.30 80.0 967.13070171686991 0.30 90.0 994.80260583578638 0.30 100.0 1020.2860583598051 0.30 110.0 1043.9491920105042 0.30 120.0 1066.0705495008092 0.35 40.0 828.55397604267148 0.35 50.0 873.24971731819551 0.35 60.0 911.77188280323685 0.35 70.0 945.81542098750799 0.35 80.0 976.43920139491001 0.35 90.0 1004.3551308142532 0.35 100.0 1030.0670096356569 0.35 110.0 1053.9431809276018 0.35 120.0 1076.2647985870872
现有操作步骤
1. 生成930等值线文件
执行以下命令生成e-nb-hierro.out:
unset surface set contour set cntrparam levels discrete 930 set table set out "e-nb-hierro.out" splot "mapa-estabilidad.dat"
2. 绘制热图(原问题命令)
unset table set dgrid3d set term pngcairo enhanced dashed color size 35cm,30cm font 'Arial, 28' set output "Estabilidad.png" set pm3d explicit set pm3d map set pm3d interpolate 0,0 set palette model RGB defined ( 1.4 'black', 1.7 'blue', 2.0 'red', 2.1 'yellow') set xlabel "{/Symbol a} [MeV]" set ylabel "{/:Italic Bag} [MeV/fm^3]" set cblabel "{/:Italic {{/Symbol e}/n_B }}[MeV]" set size square set xrange [0.0:0.35] set yrange [40:120] set mxtics 2 set mytics 2 set xtics 0.0,0.05,0.35 splot "mapa-estabilidad.dat" u 1:2:3 w pm3d not, "e-nb-hierro.out" u 1:2:3 w l lt 8 lw 3 lc 'white' not
解决方案
核心调整逻辑
你的数据是规则网格数据(X步长0.05,Y步长10),无需使用dgrid3d(该命令用于不规则数据生成网格),改用pm3d interpolate实现热图平滑,同时保留等值线叠加逻辑。
修改后的完整命令
步骤1:生成等值线(无需修改)
保持原有生成等值线的命令不变。
步骤2:绘制热图的修正命令
unset table # 移除set dgrid3d,规则网格无需此命令 set term pngcairo enhanced dashed color size 35cm,30cm font 'Arial, 28' set output "Estabilidad.png" set pm3d explicit set pm3d map # 启用pm3d插值,设置X/Y方向插值倍数,数值越大平滑效果越强 set pm3d interpolate 4,4 set palette model RGB defined (1.4 'black', 1.7 'blue', 2.0 'red', 2.1 'yellow') set xlabel "{/Symbol a} [MeV]" set ylabel "{/:Italic Bag} [MeV/fm^3]" set cblabel "{/:Italic {{/Symbol e}/n_B }}[MeV]" set size square set xrange [0.0:0.35] set yrange [40:120] set mxtics 2 set mytics 2 set xtics 0.0,0.05,0.35 # 直接绘制原始规则网格数据的pm3d热图,叠加等值线 splot "mapa-estabilidad.dat" u 1:2:3 w pm3d not, "e-nb-hierro.out" u 1:2:3 w l lt 8 lw 3 lc 'white' not
额外说明
- 若仍出现网格提示,可添加
set pm3d at b确保pm3d使用底层规则网格。 - 插值步长
interpolate x,y可根据需求调整,比如2,2为轻度平滑,6,6为重度平滑。
内容的提问来源于stack exchange,提问作者martín canullán
相关产品推荐
相关产品推荐

