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

Problem mit Darstellung der Achsen-Skala

 

Alex_P
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 24.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2012, 14:20     Titel: Problem mit Darstellung der Achsen-Skala
  Antworten mit Zitat      
Hallo zusammen,

ich habe folgendes Problem beim Plotten: Ich erstelle aus einer Messreihe 2 subplots mit den relevanten Ausschnitten (Siehe Anhang).

Was mich dabei jetzt stört, ist dass die beiden y-Achsen unterschiedlich beschriftet sind, also dass die linke als Dezimalzahl angegeben wird, die rechte als ganzzahlige Zehnerpotenzen.

Jetzt hätte ich gerne, dass beide Achsen gleich beschriftet sind, idealerweise mit 10er-Potenzen.

Mir aufgefallen, dass MATLAB anscheinend ab einem Wert von 0.01 aufwärts die y-Achsenwerte automatisch als Dezimalzahlen darstellt. Gibt es eine Möglichkeit diesen Wert zu ändern?

Vielen Dank für Eure Hilfe!

Alex

Plot1.jpg
 Beschreibung:

Download
 Dateiname:  Plot1.jpg
 Dateigröße:  101.68 KB
 Heruntergeladen:  1257 mal
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 24.07.2012, 17:39     Titel:
  Antworten mit Zitat      
Das hier wäre wohl eine triviale Lösung...

Code:

set(gca,'ytick',[2 2.1 2.2 2.3 2.4 2.5])

% bzw. allgemein...

max_y = max(y);
min_y = min(y); % oder 0
anz_ticks = 6;
delta = (max_y - min_y)/anz_ticks;
set(gca,'ytick',[min_y:delta:max_y])
Private Nachricht senden Benutzer-Profile anzeigen
 
Alex_P
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 24.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2012, 18:27     Titel:
  Antworten mit Zitat      
1000 Dank für die schnelle Antwort, DSP!
Leider löst das nicht mein Problem. Oder aber ich bin zu doof? Dann bitte ich um Aufklärung. Smile

Vielleicht habe ich mich auch missverständlich ausgedrückt? Ich möchte, dass die y-Achse in der Form x*10^-3 beschriftet ist und nicht mit 0.00x. (siehe dazu die beiden y-Achsen im Bild)

Um vielleicht noch etwas vorweg zu nehmen: Ich könnte die Y-Achse mit mV statt Volt beschriften und meine Amplitudenwerte mit 1000 multiplizieren. Das möchte ich aber nicht, da ich ganz unterschiedliche Messwerte habe. mVolts messe ich nur in einem ganz speziellen Fall, ansonsten liegen meine Spitzenwerte bei über 1V. (dann würde meine y-Achse mit z.B. 1500 mV beschriftet sein) Um das ganze einheitlich zu halten, würde ich gerne alle plots in Volt haben. Das macht es mir dann auch einfacher mein Skript auf alle (und es sind viele) Messreihen anzuwenden.

Vielen Dank,

Alex
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 25.07.2012, 10:29     Titel:
  Antworten mit Zitat      
Sorry...dann habe ich deinen ersten Post missverstanden. Ich habe angenommen, dass du genau diese Schreibweise nicht wolltest.

Leider habe ich dafür momentan keine Lösung...evtl. mal unter dem Begriff

Code:
suchen.
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: 25.07.2012, 13:28     Titel:
  Antworten mit Zitat      
Hallo Alex_P,

vielleicht hilft dies weiter:
http://www.mathworks.com/matlabcent.....rmat-tick-labels-extended
http://www.mathworks.com/matlabcentral/fileexchange/15986
http://undocumentedmatlab.com/blog/.....g-axes-tick-labels-format

Eine andere Idee ist die manuelle Erstellung der Strings:
Code:
ticks = linspace(1, 10, 20);
Str = sprintf('%4.2f*', ticks);
CStr = regexp(Str, '*', 'split');
set(gca, 'YTicks', ticks, 'YTickLabel', CStr);

Bitte debuggen, ich habe gerade kein Matlab zur Verfügung und kann mir einfach nicht merken, ob es "XTick" oder "XTicks" heißt.

Gruß, Jan

Zuletzt bearbeitet von Jan S am 25.07.2012, 18:51, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Alex_P
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 24.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2012, 15:24     Titel:
  Antworten mit Zitat      
@DSP: mit
Code:
bestimme ich lediglich die Darstellung z.B. im Command Window. Die Darstellung von Zahlen in plots wird dadurch nicht beeinflusst. Bei der Gelegenheit nochmal: Im Prinzip möchte ich also eigentlich nur
Code:
für die Darstellung der Zahlenwerte auf der y-Achse im Plot anwenden, wenn es denn soetwas geben würde.

@Jan S: In der vierten Zeile sind es 2 Klammern zu viel. Außerdem Y nicht X. Smile Trotzdem ist es das nicht. Abgesehen davon müsste ich dann ja für jede Messreihe die Werte anpassen.

Vielen Dank euch beiden!
Private Nachricht senden Benutzer-Profile anzeigen
 
Alex_P
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 24.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2012, 15:45     Titel:
  Antworten mit Zitat      
Hier nochmal ein Minimalbeispiel zur Verdeutlichung meines Problems:

Code:

subplot(1,2,1)
grid on;
xlim([0 1]);
ylim([0,0.009999])

subplot(1,2,2)
grid on;
xlim([0 1]);
ylim([0,0.01])
 


Ab einem Wert von 0.01 (rechter plot) ändert MATLAB die Formatierung der y-Achsenwerte. Dies würde ich gerne unterbinden, idealerweise aber den Wert ändern ab welchem MATLAB dies tut.

Gibt es noch weitere Ideen/Vorschläge?
Private Nachricht senden Benutzer-Profile anzeigen
 
walle
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 25.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2012, 17:46     Titel:
  Antworten mit Zitat      
Hallo,

eine Möglichkeit die exponentielle Achsenbeschriftung zu erzwingen habe ich nicht.
Immer die Dezimaldarstellung zu bekommen ist über die Vorgabe der YTicklabel möglich, siehe Beispiel unten.

[code]SP1=subplot(1,2,1);
plot(1e-3:1e-4:2e-3);
SP2=subplot(1,2,2);
YLABEL1=get(SP1,'YTick');
YLABEL1_Mod=num2str(YLABEL1','%.4f');
set(SP1,'YTicklabel',YLABEL1_Mod);

linkaxes([SP1,SP2],'y');[/code]
Private Nachricht senden Benutzer-Profile anzeigen
 
Alex_P
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 24.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2012, 17:56     Titel:
  Antworten mit Zitat      
Vielen Dank auch dir, Walle!

Ich habe alleine mit diesem Thread schon sehr viel lernen können bzgl. Achsendarstellung/-skalierung/-beschriftung, wie auch immer das sich schimpft. Das ist auf jeden Fall schon mal viel wert. Smile

Mein Problem besteht immer noch. Ich wollte genau das Gegenteil tun, nämlich die exponentielle Achsenbeschriftung zu erzwingen. Ich wundere mich, ob das so abwegig ist, dass das noch keiner gemacht hat, bzw. dass dies in MATLAB nicht möglich wäre. Auch kann ich im Netz dazu nichts finden...
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: 25.07.2012, 18:58     Titel:
  Antworten mit Zitat      
Hallo Alex_P,

Ich verstehe nicht, weshalb Dir meine Vorschläge nicht weiterhelfen.
Zitat:
Abgesehen davon müsste ich dann ja für jede Messreihe die Werte anpassen.

Wo wäre hier das Problem, solange man dies nur einmal programmiert und Matlab dies dann automatisch durchführen läßt.

Bedeutet "ich kann nichts im Netz dazu finden", dass Dir die beiden Beispiele aus der FEX und das von Yair nicht weiter helfen. Falls ja: warum nicht?
Zudem kann ich mir keine Formatierung vorstellen, die nicht mit http://undocumentedmatlab.com/blog/.....g-axes-tick-labels-format zu verwirklichen wäre. Man könnte so die Ticks sogar per Text2Speech vorlesen lassen, und das sogar dynamisch während des Zoomens!

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 24.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2012, 22:00     Titel:
  Antworten mit Zitat      
Hallo Jan,

mit dem Code den du gepostet hast funktioniert es leider nicht.
Die Achsenbeschriftung verschwindet komplett.
Passe ich die Werte in dieser Zeile:
Zitat:
ticks = linspace(1, 10, 20);
an, wird die Achse zwar dann beschriftet, jedoch weiterhin in Dezimaldarstellung und nicht exponentiell. (zumal ich mit diesem Spacing nur ungerade Werte erzeugen würde!?) Weiterhin ist jede Unterteilung mit "0.00" beschriftet (zweite Zeile-> '%4.2f'). Ändere ich dies auf 4 Dezimalstellen, bin ich genauso weit wie vorher, nur umständlicher.

In einer Messreihe, in welcher ich als Spitzenwert z.B. 150mV habe, muss ich dann doch die Werte in o.g. Zeile wiederum anpassen. Ich sehe also nicht, dass oder wie das automatisch geschieht. Mache ich etwas falsch? Dann klärt mich bitte auf.

Mit der Funktion format_ticks aus den ersten beiden Links komme ich nicht klar. Ich sehe nicht wie ich diese anpassen könnte um mein Problem zu lösen. (Ich hoffe ich habe anfangs erwähnt, dass ich kein guter Programmierer bin!)

Den letzten Link (der von Yair) muss ich gestehen, habe ich wohl irgendwie übersehen/vergessen. Diesen werde ich mir gleich morgen früh vornehmen, in der Hoffnung, dass ich hinterher schlauer bin und mich nicht weiter ärgern muss.

Trotz allem nochmals Danke Jan!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

basierend auf deinem Beispiel könnte das ein Workaround sein:

Code:
p = -3;

subplot(1,2,1)
grid on;
xlim([0 1]);
ylim([0,0.009999])
ticks = num2str(10^(-p)*get(gca, 'YTick')');
set(gca, 'YTickLabel', ticks)
text(0, 1.05*max(ylim), ['x 10^{' num2str(p) '}'])

subplot(1,2,2)
grid on;
xlim([0 1]);
ylim([0,0.01])
ticks = num2str(10^(-p)*get(gca, 'YTick')');
set(gca, 'YTickLabel', ticks)
text(0, 1.05*max(ylim), ['x 10^{' num2str(p) '}'])  


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Alex_P
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 24.07.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.07.2012, 10:48     Titel:
  Antworten mit Zitat      
Vielen Dank, Harald!

Ich habe lediglich mit dieser Zeile ein Problem:
Code:

text(0, 1.05*max(ylim), ['x 10^{' num2str(p) '}'])  
 


Habe sie ersetzen müssen durch
Code:

text(0, 1.05*max(ylim), 'x10^{-3}')  
 


Da ich das obere ylim aus meinen Messdaten gewinne, kann ich diesen Code über eine Abfrage für Werte unter 1 Volt durchlaufen, für größere Werte überspringen. Genau das was ich wollte.

Beste Grüße
Alex
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.