如何让Gnuplot为每个柱状图使用预定义颜色并解决传参报错
Gnuplot按数据行设置柱状图颜色的问题解决
你定义了颜色映射函数myLinecolor(i),但调用时传入variable导致报错internal error : non-INTGR argument,核心问题是参数类型不匹配,且word()函数的索引是1-based(从1开始),而gnuplot的行号列$0是0-based(从0开始)。
修正方案
把颜色函数的参数改成行号加1,确保传入整数索引。以下是修正后的完整代码:
LINECOLORS = 'red green blue yellow brown gray turquoise' myLinecolor(i) = word(LINECOLORS,i) set output 'results.svg' # using xval:ydata:box_width:color_index:xtic_labels # 0:5:(0.8):0:xtic(1) # xval 0- 每行的行号(0开始) # ydata 5 - 第5列的数值 # box_width 0.8 - 柱子宽度 # color_index 0 - 与行号一致的颜色索引 # xtic_labels xtic(1) - 用第1列作为x轴标签 plot 'results.csv' every ::1 using 0:5:(0.8):0:xtic(1) with boxes lc rgb myLinecolor(int($0)+1)
关键修改说明
int($0)+1:将0-based的行号转为1-based索引,匹配word()函数的索引规则,这样第1行($0=0)对应word(LINECOLORS,1)即红色,第2行对应绿色,以此类推。- 也可以用
int($4)+1替代int($0)+1,因为你在using里指定的第四列是颜色索引0,和行号完全一致,效果相同。
内容的提问来源于stack exchange,提问作者Miguel Gamboa
相关产品推荐
相关产品推荐

