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

如何在gnuplot中按角度+径向距离排序数据并分离双环

在Gnuplot中分离双环形k点数据并分别连线

要解决双环形k点数据连线交叉的问题,核心是先按径向距离区分内外环,再对每个环单独按角度排序连线,具体操作如下:

关键思路

  1. 计算每个点的径向距离:$r = \sqrt{k_x^2 + k_y^2}$
  2. 设定一个阈值,将数据分为内环(r较小)和外环(r较大)两组
  3. 对每组数据单独按极角(atan2(k_y, k_x))排序后连线,避免跨环连接

修改后的Gnuplot脚本

set xrange [-0.1 : 0.1]
set title "2D k-mesh plot at 20meV above CBM"
set terminal pdfcairo enhanced font "DejaVu" transparent fontscale 1 size 5.00in, 5.00in
set output "kmesh.pdf"
set encoding iso_8859_1
set size ratio -1  # 强制xy轴等比例,适配环形图展示
set ylabel "k_y坐标"
set xlabel "k_x坐标"
set yrange [ -0.1 : 0.1 ]
unset key
set ytics 0.05 scale 1 nomirror out
set mytics 2

# 统计径向距离分布,自动计算分界阈值(也可手动指定)
stats "kmesh.dat" using (sqrt($1**2 + $2**2)) nooutput
threshold = (STATS_min + STATS_max)/2  # 取均值作为初始阈值,可根据实际数据调整

# 分别绘制内环和外环,各自按角度排序连线
set style data linespoints
plot "kmesh.dat" using 1:2:(atan2($2,$1)) smooth zsort if (sqrt($1**2 + $2**2) < threshold), \
     "kmesh.dat" using 1:2:(atan2($2,$1)) smooth zsort if (sqrt($1**2 + $2**2) >= threshold)

细节说明

  • 若自动计算的阈值不合适,可手动指定:比如先执行plot "kmesh.dat" using (sqrt($1**2+$2**2)) with histograms查看径向分布,找到内外环的分界值后直接替换threshold = 你的分界值
  • 移除了原脚本中无用的set parametric和set multiplot命令,简化逻辑
  • set size ratio -1确保xy轴刻度比例一致,避免环形被拉伸变形

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 18:20:15