WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Bild als Hintergrund von Axes mit einzelnem Punkt plotten

 

zin
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 02.06.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.06.2019, 19:31     Titel: Bild als Hintergrund von Axes mit einzelnem Punkt plotten
  Antworten mit Zitat      
Hallo

Mein Problem ist es ein Bild als Hintergrund von einem Axes zu legen und auf diesem dann Punkte zu plotten. Da ich will dass der neue Punkt immer den alten Punkt ersetzt. Ich habe es bereits mit hold on/off versucht nur wird bei hold off das Bild auch überschrieben. Dieses sollte aber durchgehend angezeigt werden.
Gibt es eine Möglichkeit das ich nur den plot p auf hold off schalte die Axes aber nicht? bzw gibt es sonst noch eine Möglichkeit, dass das Bild immer angezeigt wird und die Punkte immer Überschrieben?

Dieser Code ist in der opening function

Code:
Muscheldiagramm=imread('Muschel_relativ.bmp');
Muscheldiagramm1=flip(Muscheldiagramm,1);
xImg = linspace(0.75, 1, size(Muscheldiagramm1, 2));
yImg = linspace(0.2049, 1, size(Muscheldiagramm1, 1));
image(xImg, yImg, Muscheldiagramm1, 'CDataMapping', 'scaled');


% Choose default command line output for GUI
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);


Diese function plotten die punkte.

Code:

function Muscheldiagramm(handles)
global logRedVals logVarName logVarUnit logSTD logList logFFT
global statRedVals statVarName statVarUnit statSTD statList statFFT
global MW3RedVals MW3VarName MW3STD MW3List MW3FFT
global pos eot minPos maxPos logMaxSTD statMaxSTD MW3MaxSTD logMaxVal statMaxVal MW3MaxVal
global log100STD stat100STD MW3100STD log100Val stat100Val MW3100Val colorArray
global lw fs1 fs2 fs3 ylr ms xImg yImg Muscheldiagramm1

ax = eval(strcat('handles.', 'muschel', 'Axes'));
hold(ax, 'on');


set(ax,'visible','off')

xlim(ax, [0.75 1]);
xlabel(ax, 'H/H_G')
ylabel(ax, 'Q/Q_G');
ylim(ax, [0.2049 1]);
    plot(0, 0, 'ko',...
        'Parent', ax, 'MarkerSize', ms);
    set(ax,'visible', 'on');
    set(ax, 'color', [0 0 0]);
    set(ax, 'FontSize', fs1);
    set(ax, 'YTickLabelRotation', ylr);
    set(ax,'YDir','normal');
   
if statRedVals{1,4}(pos)<429 && statRedVals{1,4}(pos)>427  

    p=plot(statRedVals{1,6}(1),statRedVals{1,7} (1), 'kx',...
       'Parent', ax, 'MarkerSize', ms);
    set(p, 'Xdata', statRedVals{1,6}(pos), 'Ydata', statRedVals{1,7}(pos));

end

hold(ax,'off')

xl = get(ax, 'XLabel');
yl = get(ax, 'YLabel');
set(xl, 'FontSize', fs2);
set(yl, 'FontSize', fs2);

set(ax, 'XGrid', 'on');
set(ax, 'XMinorGrid', 'off');
set(ax, 'YGrid', 'on');
set(ax, 'YMinorGrid', 'off');


pos ist die Laufvariable.

Bedanke mich schon im Vorhinein für die Antwort.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.449
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.06.2019, 21:32     Titel:
  Antworten mit Zitat      
Hallo,

eine Möglichkeit: statt den Punkt neu zu plotten nur XData und YData ersetzen.

Grüße,
Harald

P.S.: Globale Variablen sollte man vermeiden.
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
zin
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 02.06.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.06.2019, 23:56     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort.
Ich verstehe nicht ganz.
Xdata und Ydata werden doch durch das set immer auf den aktuellen Wert gesetzt oder irre ich mich da?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.449
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.06.2019, 00:12     Titel:
  Antworten mit Zitat      
Hallo,

wenn du das so machst, dann brauchst du doch auch nicht hold off zu setzen? Der alte Punkt ist ja ohnehin schon weg.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
zin
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 02.06.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.06.2019, 09:45     Titel:
  Antworten mit Zitat      
Hallo

Das dachte ich auch, ich habe den set Befehl in der if Bedingung drinnen.
Jedoch wird der Punkt nur dazu geplottet und nicht ersetzt.
Habe ich in dem Code sonst noch einen Fehler drinnen, der das veranlässt?

Gruß Zin
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.449
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.06.2019, 10:05     Titel:
  Antworten mit Zitat      
Hallo,

wenn ich es richtig sehe (das Beispiel ist leider alles andere als kompakt und nicht reproduzierbar), geht es um diese Zeilen:
Code:
if statRedVals{1,4}(pos)<429 && statRedVals{1,4}(pos)>427  

    p=plot(statRedVals{1,6}(1),statRedVals{1,7} (1), 'kx',...
       'Parent', ax, 'MarkerSize', ms);
    set(p, 'Xdata', statRedVals{1,6}(pos), 'Ydata', statRedVals{1,7}(pos));

end


Das ist nicht sinnvoll. Die p = … - Zeile erzeugt den Plot ja jedes Mal neu.

Es muss eine Entscheidung zwischen erstem Schritt ( p = … ) und Update ( set(p, …) ) gemacht werden.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
zin
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 02.06.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.06.2019, 10:59     Titel:
  Antworten mit Zitat      
Hallo ich habe es mal so versucht.

Code:
if statRedVals{1,4}(pos)<429 && statRedVals{1,4}(pos)>427
   

    p=plot(statRedVals{1,6}(pos),statRedVals{1,7} (pos), 'kx',...
       'Parent', ax, 'MarkerSize', ms);
%    set(ax,'Xdata', statRedVals{1,6}(pos), 'Ydata', statRedVals{1,7}(pos));

   
end


Der alte Wert wird trozdem noch angezeigt.

Wenn ich mich nur für das set entscheide kommt eine Fehlermeldung:

There is no Xdata property on the Axes class.

Error in GUI>Muscheldiagramm (line 486)
set(ax,'Xdata', statRedVals{1,6}(pos), 'Ydata', statRedVals{1,7}(pos));
Private Nachricht senden Benutzer-Profile anzeigen
 
zin
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 02.06.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.06.2019, 11:41     Titel:
  Antworten mit Zitat      
Hallo,

ich habe den Tipp jetzt verstanden und es funktioniert.

Danke für die Hilfe!

Gruß Zin
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.