Realmente simple pregunta. Quiero crear GUI con un simple plot que cambia algo con un control deslizante. He estado usando la interfaz gráfica de usuario y tener un control deslizante+de texto en un panel y axies1. Así que, para empezar, sólo quiero tener el control deslizante pasando de 1:10 (no de los intervalos) y el escalado de los valores de y (antes de la 1:10). He importado mis datos en la interfaz de usuario, por lo que deja fuera de los genéricos de generar automáticamente el código que me han dado:

Bajo Graphslide_OpeningFcn

handles.OutAirTemp = OutAirTemp;
handles.SupAirTemp = SupAirTemp;
guidata(hObject,handles);
handles.a = get(handles.slider2,'Value');
plot(handles.SupAirTemp,handles.a*handles.OutAirTemp)

Bajo slider2_Callback

a = get(hObject,'Value')

Tan claramente me falta algo! Los punteros, la teoría o el código será gratamente recibida.

Edit1
No hay mensaje de error para que el anterior. No obstante, no cambia la gráfica cuando deslice el control deslizante.

2 Comentarios

  1. 2

    El control deslizante de devolución de llamada es el ejecutado una vez que lo suelte. En el código anterior, es necesario actualizar los valores que se trama en los ejes en el control deslizante de devolución de llamada, que estás bastante cerca de la realidad. Creo movimiento de esas líneas:

    handles.a = get(handles.slider2,'Value');
    plot(handles.SupAirTemp,handles.a*handles.OutAirTemp)

    dentro del control deslizante de devolución de llamada de hacer lo que quiera.

    Por otro lado, se puede ver en el siguiente código para generar una interfaz gráfica de usuario sencilla con un hachas, un regulador y un cuadro de edición en la cual el valor actual del control deslizante se muestra.
    Puede configurar las propiedades de la barra como min, max y de paso a conocer el comportamiento que usted desea.

    function GUI_slider
    clc
    clear
    
    %//Create GUI controls
    handles.figure = figure('Position',[100 100 500 500],'Units','Pixels');
    
    handles.axes1 = axes('Units','Pixels','Position',[60,100,400,300]);
    
    handles.Slider1 = uicontrol('Style','slider','Position',[60 20 400 50],'Min',0,'Max',1,'SliderStep',[.1 .1],'Callback',@SliderCallback);
    
    handles.Edit1 = uicontrol('Style','Edit','Position',[250 450 100 20],'String','Update Me');
    handles.Text1 = uicontrol('Style','Text','Position',[180 450 60 20],'String','Slider Value');
    
    handles.xrange = 1:20; %//Use to generate dummy data to plot.
    
    guidata(handles.figure,handles); %//Update the handles structure.
    
        function SliderCallback(~,~) %//This is the slider callback, executed when you release the it or press the arrows at each extremity. 
    
            handles = guidata(gcf);
    
            SliderValue = get(handles.Slider1,'Value');
            set(handles.Edit1,'String',num2str(SliderValue));
    
            plot(handles.xrange,SliderValue*rand(1,20),'Parent',handles.axes1);
        end
    
    end

    Espero que ayude!

    • Funcionó!! Gracias una vez más. Dejé el original plot en allí, así que tiene sin escala de la gráfica que hay en el inicio. Luego se vuelve a cargar los ejes con la escala gráfica, que es justo lo que yo quiero.
    • Grande, entonces me alegro de que funciona!
    • En una similar(ish) nota: cuando se utiliza la interfaz gráfica, la necesito para usar clc clear all close all para borrar la memoria al inicio de la interfaz gráfica de usuario? Supongo que no, pero pensé que la mejor manera de comprobar y que no vale la pena toda una cuestión.
    • Oh, de hecho, que un reflejo de la mina en el comienzo de secuencias de comandos para el uso claro y clc jaja no necesariamente tiene que hacer esto, ya que podría causar problemas si utiliza múltiples interfaces gráficas de usuario, por ejemplo 🙂
  2. 3

    No dices qué mensaje de error que aparece, o cuál es el problema, por lo que no podemos adivinar lo que está mal. Sin embargo, hay un par de cosas que puedo ver son mal:

    • usted probablemente necesita especificar el identificador de los ejes sobre los que la trama cuando la emisión de la plot comando
    • para su slider2_Callback, usted probablemente necesita

      handles.a = get(hObject,'Value')
      guidata(hObject,handles);

    • para su Graphslide_OpeningFcn, no dices donde OutAirTemp y SupAirTemp vienen. También me gustaría problema de la guidata al final de la función, en lugar de en el medio, como estamos haciendo.

    • No hay mensaje de error. Apenas no cambia la gráfica cuando introduje el control deslizante. OutAirTemp y SupAirTemp son importados y están conspirando muy bien. Me he mudado guidata a la final de la función Graphslide_OpeningFcn. He añadido en las asas.axes1 pero esto cambió nada. ¿Qué entiende usted por su primera viñeta? Gracias
    • Mira el doc para plot, me refería plot(handles.ax,handles.SupAirTemp,handles.a*handles.OutAirTemp) donde handles.ax es el que maneja a los ejes (obtenida de otras fuentes en la interfaz gráfica de usuario, donde primero crear los ejes). Sin embargo, como @Benoit_11 señalado, el plot llamada debe estar en el control deslizante de devolución de llamada, no en la interfaz de usuario de la apertura de la función.

Dejar respuesta

Please enter your comment!
Please enter your name here