gnuplot绘制簇状柱形图叠加折线报no valid points错误
问题:gnuplot簇状柱状图叠加折线触发无有效点报错
故障场景
需要在同一张图中实现两类元素:
- x轴每个分类刻度下渲染2组柱形,组成簇状柱状图,展示两组百分比数据
- 叠加折线图,使用右侧y轴,展示两列百分比数据的比值
当前柱形部分可正常渲染,但绘制折线时触发报错:line 22: warning: Skipping data file with no valid points,折线无法正常显示。
初步怀疑报错和全局设置绘图样式为histogram有关,但无法确认,也不清楚绘制折线时是否需要单独调整绘图参数;目前仅能找到单柱叠加折线的参考案例,无簇状柱形图叠加折线的可行方案。
已提前精简代码和测试数据,排除冗余字段干扰,精简后运行仍触发相同报错。
复现用代码与数据
gnuplot脚本
set terminal png size 800,500 enhanced font "Times,12" set output 'test.png' red = "#FF0000"; green = "#00FF00"; blue = "#0000FF"; skyblue = "#87CEEB"; set key right top set yrange [0:0.2] set ylabel "Percentage" set y2range [0:1.0] set y2label "Ratio" set style data histogram set style histogram cluster gap 1 set style fill solid set boxwidth 0.9 set xtics format "" set ytics set y2tics set grid ytics set title "Some title" plot "mydata.dat" using ($2/100.0):xtic(1) title "Group 1" linecolor rgb green, \ '' using ($3/100.0) title "Group 2" linecolor rgb blue , \ '' using 1:($2/$3) with lines axis x1y2
测试数据文件mydata.dat
# File of data A 12.3 17.6 B 11.7 16.2 C 11.1 15.9 D 8.3 12.1 E 9.2 10.5
报错信息
"myfile.gnuplot", line 22: warning: Skipping data file with no valid points
故障原因
报错和histogram样式的坐标规则直接相关:
- 当使用
set style histogram cluster模式时,gnuplot不会使用数据列中的值作为x坐标,而是自动为每个分类簇分配从0开始的整数x坐标(第一个分类对应x=0,第二个对应x=1,以此类推) - 原代码中折线部分写的
using 1:($2/$3),取的是数据第1列的分类字符串(A/B/C/D/E)作为x值,字符串无法作为数值型坐标输入,因此gnuplot读不到任何有效数据点,直接跳过。
修复方案
将折线部分的x坐标改为gnuplot内置的行号计数column(0)(简写为0即可),该值是跳过注释行后从0开始的行序号,和histogram自动分配的簇x坐标完全对齐,修改后最后一行plot指令如下:
'' using 0:($2/$3) with linespoints axis x1y2 title "Ratio" linecolor rgb red lw 2
如果不需要折线上的数据点标记,把linespoints改回lines即可。修改后折线会正好对齐每个柱形簇的中心位置,双y轴显示正常,不会再触发无有效点报错。
内容的提问来源于stack exchange,提问作者StarWombat
相关产品推荐
相关产品推荐

