RealTime data plot

di il
2 risposte

RealTime data plot

Salve a tutti,

oggi sono alle prese con il plottaggio di dati in real time.
Questi dati vengono acquisiti da un oggetto esterno tramite connessione tcp/ip, ma non riesco a graficarli. Io dovrei graficare la variabile ax.
Il codice che riguarda il plottaggio dei dati è riportato sotto:
% Imposto la finestra per il grafico e inoltre definisco una funzione di callback, localCloseFigure, per chiudere le operazioni:

figureHandle = figure('NumberTitle','off',...
    'Name','Live Data Stream Plot',...
    'Color',[1 1 1],...
    'CloseRequestFcn',{@localCloseFigure,t});

%%
% Imposto gli assi:

axesHandle = axes('Parent',figureHandle,...
    'YGrid','on',...
    'YColor',[0 0 0],...
    'XGrid','on',...
    'XColor',[0 0 0],...
    'Color',[1 1 1]);

xlabel(axesHandle,'Number of Samples');
ylabel(axesHandle,'Value');

%%
% Inizializzazione del grafico:

hold on;
plotHandle = plot(axesHandle,0,'-y','LineWidth',1);
Successivamente nella funzione di lettua e plottaggio scrivo:
function localReadAndPlot(t,~,figureHandle,plotHandle,bytesToRead)

data = fscanf(t);

read_buf=data(2:19);

ax=hex2dec(read_buf(1:3));
     
%% 
% Update the plot
set(figureHandle,'Ydata',ax);
Ma non grafica i dati, ma mi cambia i valori sull'asse delle Y.

Grazie per il vostro aiuto.
Nirvana272

2 Risposte

  • Re: RealTime data plot

    C'è un errore nell'istruzione
    set(figureHandle,'Ydata',ax);
    MatLab avrebbe dovuto generare il seguente messaggio di errore:
    The name 'Ydata' is not an accessible property for an instance of class
    'figure'.
    Non lo ha fatto?

    La proprietà YData (e, di conseguenza, le ordinate dei punti di un grafico) è accessibile:
    [*] direttamente tramite l'handle del grafico (plot)
    Esempio
    % Creazione della "figure"
    hf=figure
    % Creazioine degli assi cartesiani
    axes_handle=axes
    % Definizione di punti da plottare
    x=0:.1:2*pi;
    y=sin(x)
    % Plot dei punti
    plot_handle=plot(x,y)
    grid on
    % Aggiornamento dei valori delle ascisse
    y2=y*2;
    %
    % OPZIONE #1
    % Aggiornamento del grafico (accesso diretto tramite l'handle del "plot"
    %
    set(plot_handle,'Ydata',y2);
    In questo caso, quindi dovresti modificare l'istruzione
    set(figureHandle,'Ydata',ax);
    in
    set(plotHandle,'Ydata',ax);
    [*] indirettamente, come proprietà della proprietà children degli assi
    Esempio
    % Creazione della "figure"
    hf=figure
    % Creazioine degli assi cartesiani
    axes_handle=axes
    % Definizione di punti da plottare
    x=0:.1:2*pi;
    y=sin(x)
    % Plot dei punti
    plot_handle=plot(x,y)
    grid on
    % Aggiornamento dei valori delle ascisse
    y2=y*2;
    %
    % OPZIONE #2
    % Aggiornamento del grafico (accesso indiretto tramite "children"
    %
    children_handle=get(axes_handle,'children')
    set(children_handle,'Ydata',y2);
    
    In questo caso, quindi dovresti modificare l'istruzione
    set(figureHandle,'Ydata',ax);
    in
    children_handle=get(axesHandle,'children')
    set(children_handle,'Ydata',ax);
    
    Questo, nell'ipotesi che lettura dei dati avvenga in modo corretto e che, quindi, in ax ci siano dei dati "validi" da plottare (nella domanda non fai riferimento a probòlemi nell'acquisizione dei dati).

    Hope this helps.
  • Re: RealTime data plot

    No, non mi ha dato errore. Ora comunque provo a modificare il programma e a vedere se riesco a capire dove si trova l'errore.
    Grazie mille per la tua risposta.
Devi accedere o registrarti per scrivere nel forum
2 risposte