如何在Octave中编码滑块以具有交互式绘图? [英] How to code a slider in Octave to have interactive plot?
问题描述
我的目标是要有一个图来显示外汇市场上的随机震荡指标,为了验证哪个参数是设置该参数的最佳选择,我将使用滑块进行修改并在图上显示更新的结果.
my target is to have a plot that shows Stochastic oscillator on forex market, and in order to validate which parameter is the best one to setup it, I would use a slider to modify it and show updated result on plot.
我有我的历史数据,对于已定义的货币对(假设是AUDUSD),在加载后,我计算了Stocastic振荡器:
I have my historical data, for a defined pair (let say AUDUSD) and after loading it, I calculate Stocastic oscillator:
function [stoch, fk, dk] = stochastic(n, k, d)
X=csvread("AUDUSD_2017.csv");
C=X(2:length(X),5);
L=X(2:length(X),4);
H=X(2:length(X),3);
O=X(2:length(X),2);
for m=n:length(C)-n
stoch(m)=((C(m)-min(L(m-n+1:m)))/(max(H(m-n+1:m))-min(L(m-n+1:m))))*100;
endfor
for m=n:length(C)-n
fk(m)=mean(stoch(m-d:m));
endfor
for m=n:length(C)-n
dk(m)=mean(fk(m-d:m));
endfor
endfunction
这是我绘制stoch,fk和dk时所拥有的照片:
This is a picture of what I have when I plot stoch, fk and dk:
我会在图中添加3个滑块,以便在一定范围内更改参数作为输入,即要有一个滑块在3到50之间更改第一参数"n",在2到20之间更改"k"参数,和"d"介于2到20之间.
I would add 3 sliders to the figure in order to change, in a range, parameters as input, so i.e. to have a slider that changes first parameter "n" between 3 and 50, "k" between 2 and 20, and "d" between 2 and 20.
我会以八度使用UI程序包,有人可以在我使用滑块时寻址我以更新绘图吗?
I would use UI package in octave, can someone address me to have a plot updated when I use sliders?
弗朗切斯科
推荐答案
Andy在注释中指出,我链接到的示例无法在八度范围内使用;这是因为Octave暂时不喜欢某些功能的嵌套函数,因此我在下面复制了一个"octave版本".
Andy pointed out in the comments that the example I linked to doesn't work on octave out of the box; this is because Octave doesn't like nested functions for certain things for the time being, so I've reproduced an 'octave version' below.
%%%%%% In file myplot.m %%%%%
function myplot
%% Create initial figure and spiral plot
figure; axes ('position', [0.1, 0.3, 0.8, 0.6]);
global t; t = linspace (0, 8*pi, 100);
x = t .* cos(t); y = t .* sin(t);
plot (x, y); axis ([-100, 100, -100, 100]);
%% Add ui 'slider' element
hslider = uicontrol ( ...
'style', 'slider', ...
'Units', 'normalized', ...
'position', [0.1, 0.1, 0.8, 0.1], ...
'min', 1, ...
'max', 50, ...
'value', 10, ...
'callback', {@plotstuff} ...
);
end
%% Callback function called by slider event
%% Also in file myplot.m (i.e. a subfunction)
function plotstuff (h, event)
global t;
n = get (h, 'value');
x = n * t .* cos(t); y = n * t .* sin(t);
plot (x, y); axis ([-100, 100, -100, 100]);
end
这篇关于如何在Octave中编码滑块以具有交互式绘图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!