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

如何在Gnuplot中绘制具有可变线条颜色的等高线?

解决方案

要让等高线颜色匹配曲面的自定义RGB颜色,需分开处理曲面和等高线的绘制——gnuplot自动生成的等高线不会继承pm3d的点颜色,以下是两种可行方案:

方案一:直接筛选匹配点绘制(适用于原始数据含等高线精确z值)

如果你的原始数据中存在与目标等高线z值(7.245)精确匹配的点,可直接筛选这些点并以对应RGB颜色绘制线条:

# 基础配置
set pm3d at s
set cntrparam levels discrete 7.245
# 定义RGB转十六进制整数的函数
rgb(r,g,b) = int(r)*65536 + int(g)*256 + int(b)

# 先绘制pm3d曲面,再筛选z值匹配的点绘制等高线
splot 'data' u 1:2:3:(rgb($4,$5,$6)) w pm3d, \
      '' u 1:2:(abs($3-7.245)<1e-3 ? $3 : 1/0):(rgb($4,$5,$6)) w l lw 2 lc rgb variable notitle

方案二:导出插值等高线并匹配颜色(适用于需插值生成等高线)

如果目标等高线的z值在原始数据中无精确匹配,需先让gnuplot生成插值后的等高线数据,再为这些数据匹配对应位置的RGB颜色:

# 第一步:导出插值后的等高线坐标到临时文件
set contour base
set cntrparam levels discrete 7.245
set table 'contour_data.tmp'
splot 'data' u 1:2:3
unset table
unset contour

# 第二步:获取原始数据的网格信息,定义索引计算函数
stats 'data' u 1:2 nooutput
dx = (STATS_max_x - STATS_min_x)/(STATS_nx - 1)
dy = (STATS_max_y - STATS_min_y)/(STATS_ny - 1)
grid_idx(x,y) = int((x - STATS_min_x)/dx) + int((y - STATS_min_y)/dy)*STATS_nx + 1

# 加载原始数据的RGB值到数组(需gnuplot 5.0及以上版本)
array r[STATS_nx*STATS_ny]
array g[STATS_nx*STATS_ny]
array b[STATS_nx*STATS_ny]
stats 'data' u (r[grid_idx($1,$2)]=$4, g[grid_idx($1,$2)]=$5, b[grid_idx($1,$2)]=$6) nooutput

# 第三步:绘制曲面和匹配颜色的等高线
set pm3d at s
rgb(r_val,g_val,b_val) = int(r_val)*65536 + int(g_val)*256 + int(b_val)

splot 'data' u 1:2:3:(rgb($4,$5,$6)) w pm3d, \
      'contour_data.tmp' u 1:2:3:(rgb(r[grid_idx($1,$2)],g[grid_idx($1,$2)],b[grid_idx($1,$2)])) w l lw 2 lc rgb variable notitle

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:24:31