Чтение в руководстве по gnuplot не помогло мне в этом, и мои поиски в Интернете также не были плодотворными. Я использую gnuplot 5.2 patchlevel 0
Я строю следующий график с данными из файла плюс добавленное вычисленное скользящее среднее (код ниже)
Используемый файл это, graph.dat
:
20180607-1200 20.4
20180611-1200 23.2
20180617-1200 22.1
Я бы хотел добавить гистограмму внизу графика на основе другого файла с такими же значениями x, histogram.dat
:
20180607-1200 18.95
20180611-1200 18.52
20180617-1200 18.76
и я попробовал следующий код:
set terminal png size 640,396
set border front lw 1
# Make left y-axis ticks and numbers disappear
set ytics scale 0
set ytics textcolor rgb "white"
set y2tics
set y2range [18.5:25.7]
set output 'graph.png'
set xdata time
set timefmt "%Y%m%d-%H%M"
set xtics timedate
set xtics format "%Y-%m-%d"
set xtics rotate
set mxtics 7
# A week is 604800 seconds
set xtics "20180607-1200",604800,"20180617-1200"
set offsets graph 0.015, graph 0.015, 0, 0
# For moving average
samples(x) = $0 > 4 ? 5 : ($0+1)
avg5(x) = (shift5(x), (back1+back2+back3+back4+back5)/samples($0))
shift5(x) = (back5=back4, back4=back3, back3=back2, back2=back1, back1=x)
# Initialize the running sum
init(x) = (back1 = back2 = back3 = back4 = back5 = sum = 0)
# Plot data, running average, and histogram
plot sum = init(0), \
"graph.dat" using 1:2 axes x1y2 title "graph" with linespoints, \
'' using 1:(avg5($2)) axes x1y2 title "moving average" with linespoints, \
"histogram.dat" using 1:2 axes x1y2 title "histogram" with histogram clustered
но после добавления последней строки (начиная с "histogram.dat"
) возвращается следующее сообщение об ошибке:
plot sum = init(0), "graph.dat" using 1:2 axes x1y2 title "graph" with linespoints, '' using 1:(avg5($2)) axes x1y2 title "moving average" with linespoints, "histogram.dat" using 1:2 axes x1y2 title "histogram" with histogram clustered
^
"grapher.gp", line 35: Too many columns in using specification
чего я не понимаю.
Я стремлюсь к графику с маленькой гистограммой внизу, как в этом построенном примере:
Вопрос: Что я делаю не так? Как я могу сделать linespoints
и histogram
на основе двух разных файлов, показанных на одном графике? [С тех пор я узнал, что для этого нужно использовать boxes
вместо histogram
- см. Мой собственный ответ ниже]
Бонусный вопрос: Есть ли лучший способ избежать показа чисел оси y1, лучше, чем мой хак просто сделать их белыми?