Gnuplot按轴百分比放置标签问题及文本放置替代方法咨询
问题解决与解答
一、标签未显示的直接原因
- 脚本存在语法错误:第二个
set label的at 0,缺少Y坐标值,gnuplot会忽略该标签 - 坐标设置错误:你把标签放在
(0,0),但X轴是时间格式,0对应的是1970年的时间点,远在你的数据范围之外,自然看不到标签
二、时间轴对标签X坐标的影响
当开启set xdata time后,X坐标的数值不再是普通数值,而是Unix时间戳(从1970-01-01 00:00:00开始的秒数),因此不能直接用百分比数值指定位置,必须通过gnuplot的特殊坐标系统来实现相对位置。
三、实现坐标轴百分比位置标签的正确方法
推荐两种常用方案,按需选择:
方案1:使用屏幕坐标(screen)
屏幕坐标以整个绘图窗口为基准,(0,0)是窗口左下角,(1,1)是右上角,适合放置在窗口固定比例位置:
# 右对齐标签,避免超出窗口 set label sprintf("Download 24hr avg.: %6s Mb/sec", dw) at screen 0.9, screen 0.2 right set label sprintf("Upload 24hr avg.: %6s Mb/sec", up) at screen 0.9, screen 0.1 right
方案2:使用绘图区域坐标(graph)
绘图区域坐标以坐标轴包围的区域为基准,(0,0)是绘图区左下角,(1,1)是右上角,适合放置在绘图内容内部:
set label sprintf("Download 24hr avg.: %6s Mb/sec", dw) at graph 0.9, graph 0.2 right set label sprintf("Upload 24hr avg.: %6s Mb/sec", up) at graph 0.9, graph 0.1 right
四、修正后的完整gnuplot脚本
#! /usr/bin/gnuplot set xdata time set timefmt "%Y-%m-%dT%H:%M" set format x "%m/%d %H:%M" set ytics format "%.0s%c" set xtics rotate by 60 right set grid xtics set grid ytics # 替换原错误标签,使用屏幕坐标放置 set label sprintf("Upload 24hr avg.: %6s Mb/sec", up) at screen 0.9, screen 0.1 right set label sprintf("Download 24hr avg.: %6s Mb/sec", dw) at screen 0.9, screen 0.2 right set terminal pngcairo transparent size 1000,750 set output 'speed.png' plot 'speed_1wk.dat' using 4:7 with linespoints title 'Download', \ 'speed_1wk.dat' using 4:8 with linespoints title 'Upload' set output set terminal x11
五、除set label外的文本放置方法
- 坐标轴/标题标签:用
set title、set xlabel、set ylabel设置全局标题和轴标签,适合固定位置的说明 - 数据点标注:在plot命令中使用
with labels样式,给特定数据点添加文本:plot 'speed_1wk.dat' using 4:7 with linespoints title 'Download', \ '' using 4:8 with linespoints title 'Upload', \ '' using (timecolumn(4)):(0):(sprintf("24h Avg: %.2f", dw)) with labels title '' - 图例嵌入:把平均值放在图例区域,通过
key坐标定位:set key left top set label sprintf("Download 24hr avg.: %6s Mb/sec", dw) at key 0, key 1.2 right - 多子图布局:使用
set multiplot创建小的空白子图,专门放置文本,适合复杂排版需求
内容的提问来源于stack exchange,提问作者Gert Gottschalk
相关产品推荐
相关产品推荐

