我有一个这样的数据文件,它具有三列(名为“ 0.dat”,其中包含近10000行数据,以下仅为示例):
i ii iii
1 a 1
2 b 2
3 c 6
4 d 8
5 e 10
6 f 12
7 g 14
8 h 16
9 i 18
10 j 20
第一和第三列是用于绘图的x坐标和y坐标。 第二列(ii)用于xtics标签。
我希望xtic及其标签以3的间隔出现在x轴上,也就是说,只有在x轴的1 4 7位置上,才应该有xtic标记和xtic标签“ adg”。 >
但是以下脚本显示了我数据文件中的每个poit都创建了一个xtic,也就是说,“ xticklabels”会覆盖“ set xtics”。
set term png size 800,600
set output "0.png"
set grid
set xrang [1:]
set xtics 3
plot "0.dat" using 1:3:xticlabels(2) axes x1y1 w l
set output
pause 0
如何防止xticklabel覆盖“设置xtics”?
答案 0 :(得分:2)
xticlabels始终会覆盖自动生成的标签。
不过,您可以将原始标签作为xticlabel的一部分。 这是一个将第1列内容打印为数字的选项 第2列的内容作为字符串。
1)定义标签的格式。然后,我们对每个第3个标签使用该格式,对于其他2个插槽使用空白标签: 2)跳过文件的第一行,其中不包含数据 3)每三行使用标签格式,否则使用空白标签
set bmargin 3 # leave room for 2 lines of x labels
label(i1,i2) = sprintf("%d\n%s",column(i1),stringcolumn(i2))
plot '0.dat' skip 1 using 1:3:xticlabel(int($0)%3==0 ? label(1,2) : "") with lines
替代方法
使用两个图,一个用于没有抽号的实际数据,一个仅用于带抽号和标签的数据的1/3。
set bmargin 3 # leave room for 2 lines of x labels
label(i1,i2) = sprintf("%d\n%s",column(i1),stringcolumn(i2))
set yrange [0:*] # So that a line at y = -10 will not show
plot '0.dat' skip 1 using 1:3, \
'0.dat' skip 1 every 3 using 1:(-10):xticlabel(label(1,2)) with lines