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

使用gnuplot绘制CSV文件时出现x range is invalid错误的解决方法

问题描述

我的CSV文件内容如下:

Sections,Score
text,5.80653548846
rdata,3.96936179484
data,0.378703493488
pdata,1.97732827586
rsrc,2.81352566021
reloc,0.46347168954

执行以下gnuplot命令:

gnuplot -p -e "set datafile separator ','; plot '/temp_files/iMiHRlrcQLwWYXjbjmTydBITw_PlotGraph.csv' using 1:2 with lines;"

收到错误:

line 0: warning: Skipping data file with no valid points

set datafile separator ','; plot '/temp_files/iMiHRlrcQLwWYXjbjmTydBITw_PlotGraph.csv' using 1:2 with lines;
                                                                                                                                                ^
line 0: x range is invalid

已尝试的操作:

  • 移除CSV文件的表头Sections,Score;
  • 通过set xlabel "Sections"; set ylabel "Scores";设置坐标轴标签;
  • 执行命令set title "Entropy"; set grid; plot "FILENAME"; using 0:1 with lines;
  • 参考相关技术帖子的建议

期望生成的图表样式类似:

8
    7
得分 6
    5
    4
    3 |\        ___
    2 | \      /
    1 |  \____/
    0 |  
     text rdata data
         分区
解决方案

问题核心是x轴是字符串类型(text、rdata这类分区名称),gnuplot无法直接将字符串作为数值x轴绘制线条图。正确做法是用行号作为x轴数值索引,再把第一列的字符串设置为x轴刻度标签,具体命令如下:

带表头的CSV直接绘制命令

如果保留CSV表头,需要让gnuplot跳过第一行,同时指定x轴刻度:

gnuplot -p -e "set datafile separator ','; set xtics rotate by -45 right; plot '/temp_files/iMiHRlrcQLwWYXjbjmTydBITw_PlotGraph.csv' skip 1 using 0:2 with linespoints title '得分', '' skip 1 using 0:2:xtic(1) notitle;"

无表头的CSV绘制命令

如果已经移除了表头,命令可以简化:

gnuplot -p -e "set datafile separator ','; set xtics rotate by -45 right; plot '/temp_files/iMiHRlrcQLwWYXjbjmTydBITw_PlotGraph.csv' using 0:2 with linespoints title '得分', '' using 0:2:xtic(1) notitle;"

命令解释

  • skip 1:跳过CSV第一行表头(未移除表头时必须添加);
  • using 0:2:用**第0列(从0开始的行号,作为数值型x轴)**对应第2列的得分作为y轴;
  • using 0:2:xtic(1):把第一列的分区名称设置为对应x轴的刻度标签;
  • set xtics rotate by -45 right:旋转x轴标签45度,避免名称重叠;
  • linespoints:同时显示线条和数据点,更清晰呈现每个分区的得分;

额外优化(可选)

如果要添加标题、坐标轴标签和网格,完整命令如下:

gnuplot -p -e "set datafile separator ','; set title '熵值分布'; set xlabel '分区'; set ylabel '得分'; set grid; set xtics rotate by -45 right; plot '/temp_files/iMiHRlrcQLwWYXjbjmTydBITw_PlotGraph.csv' skip 1 using 0:2 with linespoints title '得分', '' skip 1 using 0:2:xtic(1) notitle;"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:55:18