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

如何解决GNUplot中X轴刻度标签重叠问题?

GNUplot绘图X轴刻度拥挤问题解决

我在使用GNUplot绘制FFT频谱的四张子图时,遇到了X轴数字刻度挤在一起的问题,导致刻度无法清晰辨认。以下是生成该图表的C++代码及问题截图:

void plotMultiFFT(const vector<Complex>& fftResults) {
    // 创建临时数据文件
    std::ofstream dataFile("fft_data.gnu");
    if (!dataFile) {
        std::cerr << "Error creating data file\n";
        return;
    }

    // 将FFT结果写入数据文件
    for (size_t i = 0; i < fftResults.size(); ++i) {
        dataFile << i << " " << std::real(fftResults[i]) << " " << std::imag(fftResults[i]) << "\n";
    }
    dataFile.close();

    // 创建GNUplot临时脚本文件
    std::ofstream scriptFile("plot_script.gnu");
    if (!scriptFile) {
        std::cerr << "Error creating script file\n";
        return;
    }

    scriptFile << "set term png size 1024,768\n";
    scriptFile << "set output 'plot.png'\n";
    scriptFile << "set multiplot layout 2,2 title 'FFT Spectrum'\n";

    // 第一子图:实部 vs 索引
    scriptFile << "set title 'Real part'\n";
    scriptFile << "plot 'fft_data.gnu' using 1:2 with lines title 'Real'\n";

    // 第二子图:虚部 vs 索引
    scriptFile << "set title 'Imaginary part'\n";
    scriptFile << "plot 'fft_data.gnu' using 1:3 with lines title 'Imaginary'\n";

    // 第三子图:幅值 vs 索引
    scriptFile << "set title 'Magnitude'\n";
    scriptFile << "plot 'fft_data.gnu' using 1:(sqrt($2**2 + $3**2)) with lines title 'Magnitude'\n";

    // 第四子图:相位 vs 索引
    scriptFile << "set title 'Phase'\n";
    scriptFile << "plot 'fft_data.gnu' using 1:(atan2($3, $2)) with lines title 'Phase'\n";

    scriptFile << "unset multiplot\n";
    scriptFile.close();

    // 执行GNUplot脚本
    system("gnuplot -persist plot_script.gnu");
}

问题截图:
X轴刻度拥挤的FFT频谱图

解决方法

针对X轴刻度拥挤的问题,可以通过以下几种方式优化:

  1. 手动设置X轴刻度间隔
    在GNUplot脚本中添加set xtics <间隔值>,比如数据量较大时设置为set xtics 200,让刻度分布更稀疏:

    set xtics 200
    
  2. 旋转X轴刻度标签
    旋转标签避免横向重叠,添加:

    set xtics rotate by 45 right
    
  3. 调整子图边距
    在set multiplot时增加边距,给刻度标签留出更多空间:

    set multiplot layout 2,2 title 'FFT Spectrum' margins 0.12,0.95,0.12,0.95
    
  4. 利用FFT对称性优化显示
    FFT结果通常是对称的,只需显示前半部分即可减少刻度数量,修改plot命令为:

    plot 'fft_data.gnu' using 1:2 with lines title 'Real' every ::0::[FFT长度/2]
    

    把[FFT长度/2]替换为实际的数值,比如如果FFT长度是1024,就写成every ::0::512。

修改后的示例脚本片段

在生成GNUplot脚本时,将优化设置加入,比如:

scriptFile << "set term png size 1024,768\n";
scriptFile << "set output 'plot.png'\n";
scriptFile << "set xtics 200\n";  // 设置刻度间隔
scriptFile << "set xtics rotate by 45 right\n";  // 旋转刻度标签
scriptFile << "set multiplot layout 2,2 title 'FFT Spectrum' margins 0.12,0.95,0.12,0.95\n";

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 02:05:57