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

Ticks in SI Einheiten unterteilen / Use of SI-Units in Plots

 

dEliRio
Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 14.07.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.10.2012, 13:44     Titel: Ticks in SI Einheiten unterteilen / Use of SI-Units in Plots
  Antworten mit Zitat      
Hallo zusammen,

beim Arbeiten mit naturwissenschaftlichen Themen ist sehr schick wenn man sich bei der Skalierung von Grafiken oder bei Ausgaben von Werten auf die SI-Basis-Einheiten stützen könnte.

    SI-BASIS EINHEITEN
    ...
    10^0
    10^3 - kilo
    10^6 - mega
    10^9 - giga
    ...


Immer wieder stoße ich auf diese Problematik und mein Workaround ist ein umständliches nachbessern irgendwelcher XTicks oder basteln einer Case-Abfrage für sehr eingeengte Wertebereiche.

Hat jemand eine Idee solche Zahlen generisch auf die nächste SI-Basiseinheit zu konvertieren?

Gibt es das bereits?

Im nächsten Schritt wäre es dann ein Traum einen solch veränderten Zahlenstrahl, beispielsweise erhalten durch
get(gca, 'XTick')
ebenso gleich in die XTickLabels zurück zu spielen
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: 22.10.2012, 22:33     Titel: Re: Ticks in SI Einheiten unterteilen / Use of SI-Units in P
  Antworten mit Zitat      
Hallo dEliRio,

Dazu gibt es natürlich Tools. Allerdings ist "bei der Skalierung von Grafiken oder bei Ausgaben von Werten" ein sehr allgemeine Beschreibung des Problems.
Es ist schwer darauf konkret zu antworten.

Zitat:
Im nächsten Schritt wäre es dann ein Traum einen solch veränderten Zahlenstrahl, beispielsweise erhalten durch "get(gca, 'XTick')" ebenso gleich in die XTickLabels zurück zu spielen

Das verstehe ich nicht.

Ich vermute, dies hilft bereits: http://www.mathworks.com/matlabcent.....ormat-of-axes-tick-labels. Dann brauchst Du nur noch eine Funktion, die die Scientific-Names der 10er-Potenzen erzeugt, etwa:
Code:
function S = ToScientific(N)
Unit = {' yokto', ' zepto', ' atto', ' femto', ' piko', ' nano', ' mikro', ...
   ' milli', ...
   '', ' kilo', ' Mega', ' Giga', ' Tera', ' Peta', ' Exa', ' Zetta', ' Yota'};
M = N;
M(M == 0) = 1;
E    = floor(log10(M) / 3);
if length(N) == 1
   S = sprintf('%.3g %s', N / (10 ^ (E * 3)), Unit{E + 9});
else
   Str  = sprintf('%.3g*', N ./ (10 .^ (E * 3)));
   Str(end) = [];
   tmpN = regexp(Str, '*', 'split');
   S    = strcat(tmpN, Unit(E(:) + 9));
   S    = reshape(S, size(N));
end

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 14.07.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.10.2012, 17:56     Titel:
  Antworten mit Zitat      
JAN S. !!!!!!!!!!!!

PERFEKT!!!!! Exakt nach so etwas in die Richtung habe ich gesucht, dieses Trickreiche "rausfinden" der passenden Basis Einheit mittels floor und 10log etc... und diese rumtrickrserei mit den Zellstrings hat mir gefehlt, bzw. war das der Schubs in die richtige Richtung das ich mir selber weiterhelfen kann!!!



Nur mal quick&dirty ein Beispiel was ich erreichen wollte, bzw. in welche Richtung ich mit dieser Formulierung hier wollte.
Zitat:
Im nächsten Schritt wäre es dann ein Traum einen solch veränderten Zahlenstrahl, beispielsweise erhalten durch "get(gca, 'XTick')" ebenso gleich in die XTickLabels zurück zu spielen


Mit
Code:
       xTicks = get(gca,'Xtick');
        xNewTicks = ToScientific(xTicks, 2);
        for iNTindx = 2:length(xNewTicks)-1
            if strcmp(xNewTicks{iNTindx}(end-2:end),xNewTicks{iNTindx+1}(end-2:end))
                xNewTicks{iNTindx}(end-2:end) = [];
            end
        end
 

und einer angepassten Variante der "ToScientific"
Code:
function S = ToScientific(N,UnitType)
    switch UnitType
        case 1
        Unit = {' yokto', ' zepto', ' atto', ' femto', ' piko', ' nano', ' mikro', ...
           ' milli', ...
           '', ' kilo', ' Mega', ' Giga', ' Tera', ' Peta', ' Exa', ' Zetta', ' Yota'};
        case 2
         Unit = {' yokto', ' zepto', ' atto', ' femto', ' piko', ' nano', ' mikro', ...
       ' milli', ...
       '', 'kHz', 'MHz', 'GHz', 'THz', 'PHz', 'Exa', 'Zetta', ' Yota'};
    end

M = N;
M(M == 0) = 1;
E    = floor(log10(M) / 3);
if length(N) == 1
   S = sprintf('%.3g %s', N / (10 ^ (E * 3)), Unit{E + 9});
else
   Str  = sprintf('%.3g*', N ./ (10 .^ (E * 3)));
   Str(end) = [];
   tmpN = regexp(Str, '*', 'split');
   S    = strcat(tmpN, Unit(E(:) + 9));
   S    = reshape(S, size(N));
end



gelänge halt so etwas:

Von einer Standard X-Achse



zu einer X-Achse als Frequenzachse



oder




NUR ALS BEISPIEL!


Vielen Dank!!!!

temp3.jpg
 Beschreibung:

Download
 Dateiname:  temp3.jpg
 Dateigröße:  44.61 KB
 Heruntergeladen:  888 mal
temp2.jpg
 Beschreibung:

Download
 Dateiname:  temp2.jpg
 Dateigröße:  42.01 KB
 Heruntergeladen:  889 mal
temp1.jpg
 Beschreibung:

Download
 Dateiname:  temp1.jpg
 Dateigröße:  31.86 KB
 Heruntergeladen:  895 mal
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.