gnuplot: как создать цветные области сетки, а не только цветные линии сетки? - PullRequest
1 голос
/ 20 марта 2020

Я использую "gnuplot 5.2 patchlevel 2". Я пытаюсь создать фоновую сетку цветными колонками или цветными областями, как на картинке ниже. Пока что я могу раскрашивать только линии сетки. Но я хочу покрасить области сетки. Какой самый лучший способ? Вот мой код:

set terminal svg 
set output 'out.svg'
set key off  
set xlabel 'X'
set ylabel 'Y'
set title 'Data'

set grid
set grid xtics  lw 0.25 lc rgb "#ff0000" # line only, but I want to color the whole area
#unset grid
#set grid ytics lt 0 lw 1 lc rgb "#0000ff"

set xrange [0:4]
set yrange [0:100]
set tics scale 0.5
set xtics nomirror
set ytics nomirror
set style fill solid noborder
set linetype 1 lc rgb 'red' lw 0.35
set linetype 2 lc rgb '#009900' 
set linetype 3 lc rgb 'black' lw 0.5
set boxwidth 0.5 relative 
set style fill solid border lc rgb "black" 
plot "data.txt" using 1:2:4:3:5:($5 < $2 ? 1 : 2)  linecolor variable with candlesticks, \
     "data.txt" using 1:6 with lines lt 3, \
     "data.txt" using 1:5:7 with filledcurves fs transparent solid 0.3 lc rgb "blue" 

А вот мой пример файла data.txt для черчения:

1 10 30  5 20 23 29
2 25 45 10 30 34 37
3 30 50 20 25 47 53

enter image description here

1 Ответ

2 голосов
/ 20 марта 2020

Вы можете использовать фиктивную функцию, такую ​​как [x=0:16:1] '+' us (x/2):(100/(int(x)%4!=1)) with filledcurves x1. Каждая четвертая точка генерирует NaN и прерывает кривую.

$data <<EOD
1 10 30  5 20 23 29
2 25 45 10 30 34 37
3 30 50 20 25 47 53
5 10 30  5 20 23 29
7 25 45 10 30 34 37
8 30 50 20 25 47 53
EOD

set style fill solid noborder
set linetype 1 lc rgb 'red' lw 0.35
set linetype 2 lc rgb '#009900' 
set linetype 3 lc rgb 'black' lw 0.5
set boxwidth 0.5 relative 
set style fill solid border lc rgb "black" 
plot sample [x=0:16:1] '+' us (x/2):(100/(int(x)%4!=1)) with filledcurves x1 fc rgb "#EEEEEE",\
     $data using 1:2:4:3:5:($5 < $2 ? 1 : 2)  linecolor variable with candlesticks, \
     $data using 1:6 with lines lt 3, \
     $data using 1:5:7 with filledcurves fs transparent solid 0.3 lc rgb "blue" 

enter image description here

Эта функция также может быть назначена оси y2 с исправлено y2range, что может быть более удобно для интерактивных графиков с масштабированием.

...