Как уже отмечал @Ethan, линии сетки привязаны к основным или второстепенным тикам и охватывают весь граф. Но вы можете построить что-то with vectors
.
Кстати, обратите внимание, что с вашим кодом
set table $Dummy
plot FILE u ($0==1?(Ymin=$1,Ymax=$2):NaN,Xmax=$8) w table
unset table
Ymin
и Ymax
будут значениями первого и второго столбец второй строки (строки) набора данных last . Если в ваших данных нет пустых строк, то последний набор данных также является первым. Xmax
будет общим последним значением 8-го столбца.
Для вашей задачи одно решение может быть следующим ниже. Нет необходимости в sed или awk, et c. Поскольку у меня нет примеров данных от вас, я предполагаю кое-что.
- получить позиции x для ваших «линий сетки» из одного файла данных
- извлечь
Ymin,Ymax,Xmax
из другого файла данных - нанесите ваши данные
with linespoints
и «линии сетки» with vectors
Обратите внимание, что в более ранних версиях gnuplot было ограничение strcol()
до (я думаю) 63 символов . В gnuplot 5.2.7 это было исправлено.
Код:
### use vector plot to plot "grid lines"
reset session
$Data1 <<EOD
# first line
# second line
# 0.00000000 0.08329780 0.11683890 0.20013670 0.23367770
# below this line data starts
1 4
2 5
3 6
EOD
$Data2 <<EOD
1.1 2.7 0 0 1.2 0 0 0.00
1.2 2.6 0 0 1.8 0 0 0.05
1.3 2.5 0 0 2.5 0 0 0.10
1.4 2.4 0 0 2.1 0 0 0.15
1.5 2.3 0 0 1.6 0 0 0.17
1.6 2.2 0 0 1.7 0 0 0.20
1.7 2.1 0 0 2.4 0 0 0.25
EOD
set table $Dummy
set datafile commentschars '' # all lines will be data line
set datafile separator '\n' # in order to get full lines
plot $Data1 u (xValues = strcol(1)) index 0 every ::2::2 w table # get the complete 3rd line
set datafile commentschars '#' # reset the comment character
set datafile separator whitespace # reset the column separator
plot t=0 $Data2 u (t==0?(Ymin=$1,Ymax=$2,t=1):NaN,Xmax=$8) w table # get Ymin,Ymax,Xmax
unset table
print Ymin, Ymax, Xmax, xValues
xValue(n) = real(word(xValues,n+1)) # function to extract xValue
set xrange[-0.05:0.3]
set samples words(xValues)-1 # set number of datapoints of special datafile '+'
plot '+' u (xValue(int($0+1))):(Ymin):(0):(Ymax-Ymin) w vectors lc rgb "black" dt 2 nohead not, \
$Data2 u 8:5 w lp pt 7 lc rgb "red" title "Data"
### end of code
Результат:
Дополнение:
Выше я показал вам, как извлечь необходимые значения с помощью gnuplot. Да, это не так просто для понимания и не самый короткий путь, но это только gnuplot ! Если вы предпочитаете использовать sed, awk или тому подобное, не стесняйтесь, но здесь я ничем не могу помочь.
Другой подход вместо построения векторов - рисование стрелок. Предполагается, что у вас уже есть данные в переменных.
Код:
### draw arrows from a data string
reset session
xValues = "0.00000000 0.08329780 0.11683890 0.20013670 0.23367770"
Ymin = 0.2
Ymax = 0.9
Xmax = 0.25
i=0
do for [xValue in xValues] {
i=i+1
set arrow i from xValue,Ymin to xValue,Ymax nohead dt 2
}
set xrange[-0.05:0.4]
set yrange[0:1]
plot x
### end of code
Результат: