如何在gnuplot中按角度+径向距离排序数据并分离双环
在Gnuplot中分离双环形k点数据并分别连线
要解决双环形k点数据连线交叉的问题,核心是先按径向距离区分内外环,再对每个环单独按角度排序连线,具体操作如下:
关键思路
- 计算每个点的径向距离:$r = \sqrt{k_x^2 + k_y^2}$
- 设定一个阈值,将数据分为内环(r较小)和外环(r较大)两组
- 对每组数据单独按极角(
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
相关产品推荐
相关产品推荐

