Устранение пробелов в выходные / неторговые часы в gnuplot - PullRequest
0 голосов
/ 15 июня 2019

Мой вопрос идентичен этому вопросу , за исключением того, что я использую условную окраску для подсвечников, и упомянутое решение не работает.

Мои данные похожи на:

10/24/2018 23:45,168.25,168.65,168.2,168.4,0
10/24/2018 23:46,168.5,169,168.5,168.95,67577
10/24/2018 23:47,169.35,169.6,169.1,169.1,151630
10/24/2018 23:48,169.05,169.35,168.95,169.2,63418
.
.
10/26/2018 13:48,169.05,169.35,168.95,169.2,63418
10/26/2018 23:47,169.35,169.6,169.1,169.1,151630
10/26/2018 23:48,169.05,169.35,168.95,169.2,63418

Создание такого файла в gnuplot с помощью команды:

plot ".../ISTFeed.csv" using (timecolumn(1, "%m/%d/%Y %H:%M:%S")) : 2 : 3 : 4 : 5 : ($5 < $2 ? rgb(255, 0, 0) : rgb(0, 255, 0)) linecolor rgb variable notitle with candlesticks

создает диаграмму с пробелами. Я хочу, чтобы gnuplot постоянно пропускал пробелы и строил подсвечники. Есть ли способ добиться этого?

1 Ответ

1 голос
/ 15 июня 2019

Посмотрите на приведенный ниже пример с сгенерированными фиктивными данными.Хотя xtics на графике выглядят равноудаленными, значения xtics не являются равноотстоящими вообще.Поэтому, если вы хотите считать значение y между двумя значениями xtics, у вас нет «какого-либо» представления о том, что представляет собой фактическое значение x.Вы просто знаете, что это должно быть где-то между соседними xtics.Немного странно ... но если вам подходит эта точность ...

Код:

### remove gaps in timedata
# requires gnuplot >=5.2, because of use of datablocks
reset session

# generate some dummy data
t = strptime("%m/%d/%Y %H:%M", "10/24/2018 23:45")
close = 168.25
set print $Data
print "#      date time,    open,     low,    high,   close"
do for [i=1:100] {
    open = close + (rand(0)*2)-1
    low_tmp = open - rand(0)
    high_tmp = open + rand(0)
    close = open + (rand(0)*2)-1
    low = open<low_tmp ? open : close<low_tmp ? close : low_tmp
    high = open>high_tmp ? open : close>high_tmp ? close : high_tmp
    dt = 3600*rand(0)*48
    t = t + dt
    print sprintf("%s,%8 .2f,%8 .2f,%8 .2f,%8 .2f",strftime("%m/%d/%Y %H:%M",t),open,low,high,close)
}
set print
print $Data

N = 10
Offset = 5
everyNthRow(N) = (int($0)%N==Offset ? word(strcol(1),1) : NaN)
set datafile separator ","
set xtics rotate by 45 right
set style fill solid 1.0
plot $Data u 0:2:3:4:5:($5<$2 ? 0xff0000 : 0x00ff00):xtic(everyNthRow(N)) w candlesticks lc rgb var not

### end of code

Результат:

enter image description here

...