Графический интерфейс Matlab с флажком для нескольких графиков

Я сделал график в графическом интерфейсе с двумя разными векторами по оси y и одним и тем же вектором по оси x по одной оси.

Затем я поставил два флажка в графическом интерфейсе.

Я хочу сделать, например, когда первый флажок равен «on», что мои оси показывают мне первый вектор на графике, а когда «off», видимость вектора на осях равна off, то же самое для второго флажка только второй вектор. На самом деле мои флажки используются для включения on или off видимости отдельных векторов на осях.

Вот мой код:

function checkbox1_Callback(hObject, eventdata, handles)    
    if (get(hObject,'Value')) == 1  
        plot(vectorx,vectory);
    else 
        ???
    end

Когда мой флажок «on», векторы видны на графике, но я не могу удалить его, когда флажок «off», я могу использовать функцию cla(), но эта функция удаляет все по осям.


person m4rko    schedule 30.03.2014    source источник


Ответы (2)


Если вы хотите, чтобы флажок контролировал только видимость данного графика, вам нужно создать свой график заранее и сохранить дескриптор вашего графика, чтобы вы могли повторно использовать его позже, чтобы включить или выключить видимость.

где-то еще в вашем коде:

handles.handle_plot1 = plot(vectorx,vectory);

затем в обратном вызове вашего флажка:

function checkbox1_Callback(hObject, eventdata, handles)
   handles.handle_plot1 = handles.handle_plot1 %// optional, you can use another way to retrieve your handle
   if (get(hObject,'Value')) == 1  
       set(handle_plot1, 'visible' , 'on')
   else 
       set(handle_plot1, 'visible' , 'off')
   end

Не забудьте сохранить дескриптор графика (сразу после того, как вы его создали) таким образом, чтобы вы могли получить его из своего обратного вызова, но я предполагаю, что вы знаете, как это сделать, поскольку в исходном коде ваш обратный вызов уже вызывал переменную векторx и вектор.

Очевидно, сделайте то же самое для второго графика и флажка.

person Hoki    schedule 30.03.2014

Это демонстрация того, как можно добиться того, что вы пытаетесь сделать. Замените данные, используемые в этих кодах, своими. Коды предполагают, что тег оси axes1 -

%%// --- Executes on button press in checkbox1.
function checkbox1_Callback(hObject, eventdata, handles)

vectorx = 1:50;
vectory1 = sin(vectorx);
if get(hObject,'Value')
    plot(vectorx,vectory1);
else
    cla(handles.axes1);
end

return;


%%// --- Executes on button press in checkbox2.
function checkbox2_Callback(hObject, eventdata, handles)

vectorx = 1:50;
vectory2 = cos(x2);
if get(hObject,'Value')
    plot(vectorx,vectory2);
else
    cla(handles.axes1);
end

return;
person Divakar    schedule 30.03.2014