gnuplot:如何防止xticklabel覆盖“ set xtics”

时间:2019-11-02 01:28:30

标签: gnuplot

我有一个这样的数据文件,它具有三列(名为“ 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”?

1 个答案:

答案 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

enter image description here

替代方法

使用两个图,一个用于没有抽号的实际数据,一个仅用于带抽号和标签的数据的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

enter image description here