每次按下Matlab GUI按钮更新图

时间:2016-01-08 23:01:38

标签: matlab user-interface matlab-figure

我开发了一个用于跟踪投注基金的GUI。它会告诉您相对于您的基金规模下注多少。它的基础是它有2个按钮,无论输赢。每次按下它都会更新基金规模并告诉您下注(10%)哪里的赢/输率是双倍或没有。

下面是一个例子。如果初始基金是1000英镑,我们让胜利= 1,亏损= 0

enter image description here

按下按钮时,它仅显示新的基金规模和下注大小。我正在寻找一种方法来绘制结果,以便它将所有newFundSize(y轴)与计数(x轴)进行绘制,以便它显示您的基金规模如何随时间变化(投注数量)。

它目前将x轴更改为正确的长度,     x1 = linspace(1:currentCount)。 对于Y值,我只记得以前的基金规模和新的基金规模。

是否有可能以某种方式绘制所有新的基金规模数据?或者存储以前的所有基金规模值?

还有一种方法可以存储按下输赢按钮的顺序和次数吗?

例如,赢,胜,输,赢,输,赢将存储为[1 1 0 1 0 1]?

感谢。

1 个答案:

答案 0 :(得分:1)

是的,可以在MATLAB中存储所有这些信息。有几种方法可以做到这一点,但最好的方法是将数据存储在图中。您可以使用guidatasetappdata and getappdata或图中的UserData属性执行此操作。

下面我有一个使用setappdata方法的示例,其中我将信息存储在数据结构中,该数据结构是具有以下形式的结构数组

data =

      win: true    % Logical indicating whether it was a winning bet
     fund: 1000    % Amount of money in the fund
    count: 0       % The number of bets placed so far (optional)

每次用户下注时,我都会将上述格式的另一个结构附加到数据结构中。

以下是完整的示例。

function data = bet(initialFund, betPercentage)
    if ~exist('initialBet', 'var')
        initialFund = 1000;
    end

    if ~exist('betPercentage', 'var')
        betPercentage = 10;
    end

    % The data structure that we will use to keep track of the bets
    data = struct('win', NaN, 'fund', initialFund, 'count', 0);

    % Now create the figure and the plot that you want
    fig = figure();

    hax = axes(...
        'Parent', fig, ...
        'Units', 'normalized', ...
        'Position', [0.15 0.35 0.7 0.6]);

    % Plot to display current fund data
    plt = plot(NaN, NaN, 'Parent', hax);

    xlabel(hax, 'Bet', 'FontWeight', 'bold', 'FontSize', 18)
    ylabel(hax, 'Fund ($)', 'FontWeight', 'bold', 'FontSize', 18)

    set(hax, 'FontWeight', 'bold')

    % Create a button to place a winning and losing bet
    uicontrol(fig, ...
        'String', 'Place Winning Bet', ...
        'Units', 'normalized', ...
        'Position', [0.01 0.01 0.45 0.2], ...
        'Callback', @(s,e)place_bet(true, betPercentage/100));

    uicontrol(fig, ...
        'String', 'Place Losing Bet', ...
        'Units', 'normalized', ...
        'Position', [0.5 0.01 0.45 0.2], ...
        'Callback', @(s,e)place_bet(false, betPercentage/100));

    % Store the data within the handle
    setappdata(fig, 'BetData', data)

    % Plot the initial bet data
    refreshPlot(data);

    function place_bet(win_lose, percentage)
        % Determine whether we win or lose
        data = getappdata(fig, 'BetData');

        % Now add the new data
        lastbet = data(end);

        % Compute the new fund based on the bet amount
        newfund = (1 - ((-1)^win_lose) * percentage) * lastbet.fund;

        newdata = struct(...
            'win', win_lose, ...
            'fund', newfund, ...
            'count', lastbet.count + 1);

        data = cat(1, data, newdata);

        % Store the updated data
        setappdata(fig, 'BetData', data)

        % Now update the plot
        refreshPlot(data);
    end

    function refreshPlot(data)
        set(plt, 'XData', [data.count], 'YData', [data.fund])
        set(hax, 'XLim', [data(1).count, max(data(end).count, 10)])
    end
end