【问题标题】:How to code a slider in Octave to have interactive plot?如何在 Octave 中编写滑块以进行交互式绘图?
【发布时间】:2017-09-17 01:25:12
【问题描述】:

我的目标是在外汇市场上绘制一个显示随机震荡指标的图表,并且为了验证哪个参数是设置它的最佳参数,我将使用滑块对其进行修改并在图表上显示更新的结果。

我有我的历史数据,对于一个已定义的货币对(比如说 AUDUSD),在加载它之后,我计算随机震荡指标:

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 时的照片:

我会在图中添加 3 个滑块,以便在一个范围内更改作为输入的参数,即有一个滑块将第一个参数“n”更改为 3 到 50,“k”更改为 2 到 20,和“d”在 2 到 20 之间。

我会在 octave 中使用 UI 包,有人可以告诉我在我使用滑块时更新绘图吗?

弗朗西斯科

【问题讨论】:

  • 看我的回答here 一个超级简单的例子
  • @TasosPapastylianou 您的示例在八度音阶中无法开箱即用。你试过了吗?
  • @TasosPapastylianou 我会看看你的链接!非常感谢
  • @Andy 哦,对了,对不起,我在底部提到,暂时应该避免在 Octave 中使用嵌套函数进行回调,但我应该在这里向 Francesco 指出。感谢您指出。在这种情况下,我不妨修复 Octave 的代码并发布我猜的答案。

标签: user-interface plot slider octave stochastic


【解决方案1】:

看看at this demo,它将为您提供一个可以回答您所有问题的窗口:

您的具体问题的相关部分是:

h.noise_slider = uicontrol ("style", "slider",
                            "units", "normalized",
                            "string", "slider",
                            "callback", @update_plot,
                            "value", 0.4,
                            "position", [0.05 0.25 0.35 0.06]);
....
 noise = get (h.noise_slider, "value");

一定要使用Qt工具包!

【讨论】:

  • 谢谢你的回复,看来这正是我要找的。我会让你知道我的项目的发展。
【解决方案2】:

Andy 在 cmets 中指出,我链接到的示例不适用于开箱即用的八度音程;这是因为 Octave 暂时不喜欢某些事物的嵌套函数,所以我在下面复制了一个“八度版本”。

%%%%%% 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

【讨论】:

  • 不错的简短回答。顺便说一句,我们应该将一些 uicontrol 演示集成到 GNU Octave 4.4 的核心中......
猜你喜欢
  • 2017-10-22
  • 2021-09-07
  • 2012-05-12
  • 2014-04-05
  • 2012-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-11
相关资源
最近更新 更多