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

Änderung der Größe der Marker in Abhänigkeit vom Zoomfak

 

Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 17.09.2010, 13:25     Titel: Änderung der Größe der Marker in Abhänigkeit vom Zoomfak
  Antworten mit Zitat      
Hallo,

haenge gerade bei einem Problem wo ich absolut keine Idee habe wie ich es loesen kann.

Ich habe einen Plot mit eigenen Markern, die ich mit dem text Befehl erzeugt habe:

Code:

x = 0:.5:2*pi;
y = sin(x);
plot(x,y)
hold on
text(x,y,'\mid','Interpreter', 'tex', 'HorizontalAlignment', 'center','VerticalAlignment','middle', 'Color',[1 0 0],'FontSize', 15);
 


Nun moechte ich gern den plot zoomen und dabei auch die Fontsize der Marker mit vergroessern bzw verkleinern (zoom out). Gibt es eine Moeglichkeit zu erkennnen wenn der User den Zoombutton gedrueckt hat und dann, wie bei einer Gui, eine Art Callback hat wo man noch eigene Erweiterungen bzw. Funktionen implementieren kann?

Ware fuer jegliche Hilfe SEHR dankbar.

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.09.2010, 18:19     Titel: Re: Änderung der Größe der Marker in Abhänigkeit vom Zoo
  Antworten mit Zitat      
Hallo Sco,

Ich würde keine "|"-Marker per TEXT erzeugen, wenn Du hinterher noch zoomen möchtest. Du könntest einfach senkrechte Linien zeichnen:
Code:
x = 0:.5:2*pi;
y = sin(x);
line([x; x], [y - 0.25; y + 0.25]);

Jetzt kannst Du beherzt zoomen ohne irgendwelche Callbacks zu brauchen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Themenstarter

Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 17.09.2010, 19:39     Titel:
  Antworten mit Zitat      
Hallo Jan,

vielen Dank für den Tipp mit der line, das ist echt genial. Jedoch würde mich trotzdem mal interessieren wie es denn wäre wenn ich als Marker z.B. bliebigen Text habe oder z.B. bst. Punkte in einem Bild beschriften möchte UND ich beim zoom eben den Text auch vergrößert haben möchte.
Um bei dem alten Beispiel zu bleiben:

Code:

x = 0:.5:2*pi;
y = sin(x);

plot(x,y)
hold on
text(x,y,'text')
 


Was ich bis jetzt rausbekommen hab (am Beispiel eines Bildes mit Text) ist das ich mit:

Code:

function xy

imshow(bild);
hold on
for k = 1:10 % Anzahl der texte
     t(k) = text(x,y,'beliebiger_text');
end

h = zoom;
set(h,'ActionPostCallback',{@zoom_callback,t});
end

function zoom_callback(obj,evd,t)

set(t,'FontSize',20);
end
 


Zugriffe auf den Zoom Button erkennen und die Schriftgröße der Texte ändern kann.

Meine Frage wäre nun noch wie man erkennt ob rein- oder rausgezoomt wurde, da beide Buttons diesen Calback ansprechen und ob es vielleicht noch eine elegantere Lösung gibt?

Vielen Dank schonmal im Vorraus!

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.09.2010, 20:56     Titel:
  Antworten mit Zitat      
Hallo Sco,

der ActionPostCallback wird "nach" der Action ausgegführt. Dann hat das AXES-Object bereits die neuen Limits. Die Y-Limits kannst Du dann verwenden um die angezeigte Größe zu erfahren und die FontSize "entsprechend" anpassen:
Code:

function zoom_callback(obj, evd, t)
AxesH = ancestor(t(1), 'axes');
YRange = diff(get(AxesH, 'YLim'));
set(t, 'FontSize', YRange / 10);
end
 

Nun ist YRange/10 ein wenig grob, aber das kannst Du dann an Deine Wünsche Anpassen.

Was leider nicht funktioniert sind "normalized" FontUnits. Die reagieren auf die Größe des AXES-Objects:
Code:
FigH = figure;
AxesH = axes('Position', [0.3, 0.3, 0.4, 0.4]);
plot(1:10);
TextH = text(5, 5, 'Hallo');
set(TextH, 'FontUnits', 'normalized');
% Jetzt ist die FontSize an die Größe des AXES-Objects gekoppelt.
pause(3);
set(AxesH, 'Position', [0, 0, 1, 1]);
 


Viel Erfolg, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Themenstarter

Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 20.09.2010, 18:42     Titel:
  Antworten mit Zitat      
Hallo Jan

Danke ich habe hinbekommen was ich wollte, mit nur einer kleinen Aenderung (aber macht das selbe wie deins):

Code:

function zoom_callback(obj,evd,t)
YRange = diff(get(evd.Axes,'YLim'));
set(t, 'FontSize', value);
end
 


Fuer das Value habe ich eine Umrechnugsgleichung, die mir eben je nach Axengroesse einen angebrachte Schriftgroesse liefert. Denn nur durch 10 teilen das geht nicht wirklich, da z.B. beim vergroessern die Schriftgroesse kleiner wird (aber sie sollte ja groesser werden). Naja wie auch immer...Danke nochmal.

MFG

Sco
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 - 2025 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.