gnuplot蜡烛图红绿填充

7
金融网站上的蜡烛图至少在我看到的那些网站上,如果收盘价高于开盘价,则填充绿色蜡烛;如果收盘价低于开盘价,则填充红色蜡烛。
如果我设置填充样式,所有蜡烛都将填充填充颜色,是否有方法在gnuplot 4.6中使用上述描述的颜色方案?
以下是一个示例脚本:
set xdata time
set timefmt"%Y-%m-%d %H:%M:%S"
set xrange ["2014-01-01":"2014-01-02"]
set yrange [*:*]
set datafile separator ","
plot '201401_EURUSD_Hourly.csv' using 1:2:4:3:5 notitle with candlesticks

带有一些数据点

2014-01-01 17:00:00,1.376150,1.376550,1.374020,1.375990
2014-01-01 18:00:00,1.376100,1.377340,1.375980,1.376520 
2014-01-01 19:00:00,1.376440,1.376870,1.375780,1.375860 
2014-01-01 20:00:00,1.375850,1.376470,1.375000,1.376280 
2014-01-01 21:00:00,1.376270,1.376720,1.375970,1.376530 
2014-01-01 22:00:00,1.376550,1.377440,1.376270,1.376530 
2014-01-01 23:00:00,1.376540,1.376540,1.374390,1.374520 
2014-01-02 00:00:00,1.374500,1.375790,1.374380,1.375660 
2014-01-02 01:00:00,1.375630,1.375740,1.374610,1.375000 
2014-01-02 02:00:00,1.374980,1.375270,1.372480,1.373100

1
是的,您可以使用linecolor变量或类似的变量。请提供一个包含几个数据点的最小工作示例。 - Christoph
我似乎无法正确排列代码,帮助在这种情况下毫无用处。让我获取一些数据点。 - Bodger
2014-01-01 17:00:00,1.376150,1.376550,1.374020,1.375990 2014-01-01 18:00:00,1.376100,1.377340,1.375980,1.376520 2014-01-01 19:00:00,1.376440,1.376870,1.375780,1.375860 2014-01-01 20:00:00,1.375850,1.376470,1.375000,1.376280 2014-01-01 21:00:00,1.376270,1.376720,1.375970,1.376530 2014-01-01 22:00:00,1.376550,1.377440,1.376270,1.376530 2014-01-01 23:00:00,1.376540,1.376540,1.374390,1.374520 2014-01-02 00:00:00,1.374500,1.375790,1.374380,1.375660 2014-01-02 01:00:00,1.375630,1.375740,1.374610,1.375000 2014-01-02 02:00:00,1.374980,1.375270,1.372480,1.373100 - Bodger
好的,我已经将脚本添加到问题中了。你可以在问题内部正确地格式化代码(在每行前面添加四个空格,或者标记并按Ctrl+K)。 - Christoph
请稍等,我正在准备答案 :) - Christoph
显示剩余3条评论
1个回答

8
以下是一则使用预定义调色板选择颜色的示例(关键字为 palette):
set xdata time
set timefmt"%Y-%m-%d %H:%M:%S"
set datafile separator ","

set palette defined (-1 'red', 1 'green')
set cbrange [-1:1]
unset colorbox

set style fill solid noborder

plot '201404_EURUSD_Hourly.csv' using 1:2:4:3:5:($5 < $2 ? -1 : 1)  notitle with candlesticks palette

这段代码使用了一个额外的列(最后一列),用于在值 -1(红色,收盘价低于开盘价)和值 +1(绿色,收盘价高于开盘价)之间进行选择。

在 4.6.4 版本中的输出结果如下:

enter image description here

第二种选项是使用 linecolor rgb variable,此时最后一列必须以rgb元组的整数表示形式出现:

set xdata time
set timefmt"%Y-%m-%d %H:%M:%S"
set datafile separator ","

set style fill solid noborder

# Place colored points in 3D at the x,y,z coordinates corresponding to
# their red, green, and blue components
rgb(r,g,b) = 65536 * int(r) + 256 * int(g) + int(b)

plot '201404_EURUSD_Hourly.csv' using 1:2:4:3:5:($5 < $2 ? rgb(255,0,0) : rgb(0,255,0))  linecolor rgb variable notitle with candlesticks

最后但并非最不重要的一点,使用linecolor variable来在两种线条类型之间进行选择 (最后一列是线条类型索引):

set xdata time
set timefmt"%Y-%m-%d %H:%M:%S"
set datafile separator ","

set style fill solid noborder

set linetype 1 lc rgb 'red'
set linetype 2 lc rgb 'green'

plot '201404_EURUSD_Hourly.csv' using 1:2:4:3:5:($5 < $2 ? 1 : 2)  linecolor variable notitle with candlesticks

好的,我会关闭这个并希望它会给你信用,如果没有,请再评论。 - Bodger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接