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

Achsenbeschriftung mit Kommas statt Punkten

 

ueg
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 15.08.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.03.2020, 23:40     Titel: Achsenbeschriftung mit Kommas statt Punkten
  Antworten mit Zitat      
Guten Tag,

ich habe ein kleines Problem mit meinen Matlab-Plots.
Und zwar habe ich für meine Studienarbeit alle Schaubilder mit Matlab Skripten erstellt.
Nun habe ich den Hinweis erhalten, dass ich bitte die Achsenbeschriftungen der Schaubilder in meiner Ausarbeitung nach deutschem Standard, und demnach einer Abtrennung der Dezimalen mit einem Komma, ausführen soll.
In den Matlab-eigenen Einstellungen habe ich dazu nichts gefunden.
Durch eine kurze Recherche im Internet kam ich unter anderem auf folgende Zeilen:

Code:
set(gca, 'XTickLabel', strrep(cellstr(get(gca, 'XTickLabel')), '.', ','));
             set(gca, 'YTickLabel', strrep(cellstr(get(gca, 'YTickLabel')), '.', ','));


Das funktioniert insofern, dass mir die Achsenbeschriftungen nun mit Kommas getrennt sind. Das Blöde ist nur, dass die Beschriftung (also die Zahlen) an sich nicht mehr stimmen.

Ein Beispiel habe ich angehängt.

Mit diesem Problem dürfte ich bei wissenschaftlichen Arbeiten wahrscheinlich nicht allein sein. Kann mir jemand von euch weiterhelfen? Hat jemand bereits ein funktionierendes Skript geschrieben? Ich habe auch zwei bei Google weit oben angezeigte selbst geschriebene Funktionen ausprobiert, welche allerdings auch nicht funktioniert haben.. Ich denke die waren noch für ältere Matlab-Versionen.

Schon einmal vielen Dank und einen guten Start in die Woche.

Viele Grüße
Tim

Punkt_aber_richtige_Zahlenwerte.png
 Beschreibung:
Punkte mit richtigen Zahlenwerten

Download
 Dateiname:  Punkt_aber_richtige_Zahlenwerte.png
 Dateigröße:  72.06 KB
 Heruntergeladen:  219 mal
Komma_aber_falsche_Zahlenwerte.png
 Beschreibung:
Kommas mit falschen Zahlenwerten

Download
 Dateiname:  Komma_aber_falsche_Zahlenwerte.png
 Dateigröße:  27.06 KB
 Heruntergeladen:  229 mal
Private Nachricht senden Benutzer-Profile anzeigen


ueg
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 15.08.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.03.2020, 23:46     Titel:
  Antworten mit Zitat      
Eine kleine Anmerkung noch:
Das Problem scheint nur in den gespeicherten Plots als *.jpg und *.png aufzutreten.
In den gespeicherten *.fig Dateien scheint alles zu passen..


Mit:

Code:
 xl = get(gca,'XTickLabel');
  new_xl = strrep(xl(:),'.',',');
  set(gca,'XTickLabel',new_xl);
   yl = get(gca,'YTickLabel');
  new_yl = strrep(yl(:),'.',',');
  set(gca,'YTickLabel',new_yl);


Habe ich das identische Problem der inkorrekten Darstellung der Achsenbeschriftung (falsche Zahlen) bei png und jpg Bildern.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

ich würde immer XTick und XTickLabel zusammensetzen, ebenso YTick und YTickLabel.

Wenn das Problem nur beim Export nach .png oder .jpg auftritt, wäre eine interessante Frage: wie exportierst du?

Am einfachsten ist die Unterstützung immer mit einem komplett reproduzierbaren Beispiel.

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
 
ueg
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 15.08.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.03.2020, 22:09     Titel:
  Antworten mit Zitat      
Das mit dem reproduzierbaren Beispiel ist so eine Sache.. Wink
Das Skript habe ich mir beim Einlesen und Verarbeiten der Daten ziemlich hingeschustert. Es tut aber auf jeden Fall was es soll.

Das Plotten der Daten ist aber ganz "normal" da werden zwei Spalten einer Matrix als Array gespeichert und diese über x und y aufgetragen.

Exportiert wird folgendermaßen als JPEG, fig und PNG:

NeueDatei.. ist dabei der Dateiname inklusive Pfad als ein String.

Code:
%Dateien abspeichern            
            saveas(figure(1), NeueDateiJPEG);
            savefig(NeueDateiFig);
            print(figure(1),'-dpng',NeueDateiPNG);


Falls das etwas mit dem Abspeichern an sich zu tun hat:
Wenn ich die Grafiken als .jpg exportiere, sind sie etwas "verpixelt". Es hat wie Wolken um die Kurven rum wenn man mit einem geeigneten Bildschirm nah genug ranzoomt.
Liegt das an meiner Art zu exportieren, oder an der jpg Bildkomprimierung?
Bei den png habe ich das nicht. Diese Unschärfen sind auch der einzige Grund, warum ich überhaupt zusätzlich als png exportiere.

Hier ist nun mal der gesamte Code dieses Scripts angehängt. Ich hänge auch noch eine Datei an, anhand der man das Zeichnen des Schaubilds ausprobieren kann.

In dem kommentierten Bereich kann man dann die Modifikation Trennung mit Punkt oder Komma ein- oder ausschalten.

Bitte lyncht mich nicht für meine Programmierung, ich hatte vor dieser Arbeit noch nie etwas mit Matlab zu tun. Wink

Nach dem Starten des Skripts einfach den Ordner anwählen (nicht öffnen) in dem die angehängte csv-Datei liegt. Anschließend werden die jpg, png und fig Dateien in erstellten Ordnern in dem ausgewählten Ordner abgelegt.

Code:
close all;
AusgewaehlterOrdner = uigetdir();                                           %Ordner auswählen in dem die Dateien liegen
AlleDateienimOrdner = dir(fullfile(AusgewaehlterOrdner, '*.csv'));          %Ausgewählter Ordner wird geöffnet und Dateien aufgelistet
AlleDateinamen = {AlleDateienimOrdner.name};                                %Alle Dateinamen werden aufgelistet
AnzahlcsvDateien=numel(AlleDateinamen);                                     %Anzahl von .csv-Dateien wird abgefragt
GesamtZeit = 0;                                                                


    for Laufindex=1:AnzahlcsvDateien                                        %Für so viele *.csv-Dateien wie es gibt das Nachfolgende ausführen
        tic;
        ZeitEinzeln = 0;
        Testobordner = {AlleDateienimOrdner.isdir};                         %liest in der Spalte des Struct aus ob ein Ordner vorliegt oder nicht
        Ordnerodernicht = Testobordner{Laufindex};                          %umwandeln von Cell in logical
         
        if Ordnerodernicht == 0                                             %nur für Dateien ausführen die keine Ordner sind (sollten aber weil nur .csv-Dateien angezeigt werden, sowieso keine Ordner sein)
            EinzelnerDateiname = AlleDateinamen{Laufindex};                 %Name der Datei
            Dateipfad = {AlleDateienimOrdner.folder};                       %Pfade aller Dateien
            Pfad = Dateipfad{Laufindex};                                    %Pfad der aktuellen Datei
            gesamt = [Pfad '\' EinzelnerDateiname];                         %Pfad und Dateiname verbunden
            Messwerte = importdata(gesamt);                                 %Messwerte extrahieren        
            NameohneEndung = EinzelnerDateiname(1:end-4);                   %.csv abschneiden

           
%Matrix aus Messdaten erzeugen

            Matrix=Messwerte.data;
           
%Spalten/Achsen benennen

            Zeit = Matrix(:,1);
            Anregung = Matrix(:,2);
            Antwort = Matrix(:,3);
           
           
%Schaubilder erzeugen        
             figure('Name', NameohneEndung, 'NumberTitle', 'off');
             plot(Zeit, Anregung, 'b',  Zeit, Antwort, 'r');
             xlabel('Zeit in s',  'FontSize', 12, 'FontName', 'Arial');
             ylabel('Amplitude in V', 'FontSize', 12, 'FontName', 'Arial');
% %Hier Achsenbeschriftung ändern (rauskommentiert = Trennung mit Punkt)
%  xl = get(gca,'XTickLabel');
%  new_xl = strrep(xl(Smile,'.',',');
%  set(gca,'XTickLabel',new_xl);
%   yl = get(gca,'YTickLabel');
%  new_yl = strrep(yl(Smile,'.',',');
%  set(gca,'YTickLabel',new_yl);
%  %ende neu
             title(NameohneEndung);
             

             
             grid on;
             legend('Anregung', 'Messsignal', 'Location', 'northwest', 'Orientation', 'horizontal' );
             
             
             
%Name der neuen Dateien
             NamemitJPG = [NameohneEndung '.jpg'];
             NamemitFig = [NameohneEndung '.fig'];
             NamemitPNG = [NameohneEndung '.png'];


%Ordner für Speicherorte
            ZielpfadSchaubild = [AusgewaehlterOrdner '\Fig-Dateien\'];      %Später Ordner "Fig-Dateien" in gewähltem Ordner erstellen
            ZielpfadJPG = [AusgewaehlterOrdner '\JPEG Bilder\'];            %Später Ordner "JPEG Bilder" in gewähltem Ordner erstellen
            NeueDateiJPEG = [ZielpfadJPG NamemitJPG];                       %Dateiname und Endung an Pfad anhängen
            NeueDateiFig = [ZielpfadSchaubild NamemitFig];                  %Dateiname und Endung an Pfad anhängen
            NeueDateiPNG = [ZielpfadJPG NamemitPNG];
             
%Speicherorte erstellen
            if ~isfolder(ZielpfadJPG)
                mkdir(ZielpfadJPG);                                         %Ordner für Bilder erstellen falls nicht vorhanden
            end
            if ~isfolder(ZielpfadSchaubild)
                mkdir(ZielpfadSchaubild);                                   %Ordner für .fig-Dateien erstellen falls nicht vorhanden
            end

%Dateien abspeichern            
            saveas(figure(1), NeueDateiJPEG);
            savefig(NeueDateiFig);
            print(figure(1),'-dpng',NeueDateiPNG);

%Ende und Meldungen            
            close all;
            ZeitEinzeln = toc;
            MeldungEinzeln = ['Datei ', EinzelnerDateiname, ' wurde erfolgreich bearbeitet.'];
%             disp(ZeitEinzeln);
%             Kann man sich anzeigen lassen, wenn man will.
           
            disp(MeldungEinzeln);
            GesamtZeit = GesamtZeit + ZeitEinzeln;
        end
    end
    MeldungEnde = ['Alle .csv-Dateien im ausgewählten Ordner wurden bearbeitet. Zeitdauer in s: '];
    disp(MeldungEnde);
    disp(GesamtZeit);
 


Viele Grüße und schon einmal vielen Dank
Tim


Edit: Ich habe gerade bemerkt, dass ich CSV-Dateien hier im Forum nicht anhängen kann..
Das ist ein Link zu meiner Dropbox in der ich die Datei temporär einmal abgelegt habe.
Edit2: Ich habe den Dropbox Link mal rausgenommen und die Datei einfach gezippt zum Anhängen.

Testdatei.zip
 Beschreibung:
Testdatei

Download
 Dateiname:  Testdatei.zip
 Dateigröße:  600.33 KB
 Heruntergeladen:  183 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

sorry, hat etwas gedauert. Wie schon vermutet: man muss XTick und YTick auch setzen. Sieht zwar etwas umständlich aus, aber so sieht es m.E. gut aus:

Code:
xl = get(gca,'XTick')';
 set(gca,'XTick', xl);
 new_xl = strrep(cellstr(num2str(xl)),'.',',');
 set(gca,'XTickLabel',new_xl);
 yl = get(gca,'YTick')';
 set(gca,'YTick', yl)
 new_yl = strrep(cellstr(num2str(yl)),'.',',');
 set(gca,'YTickLabel',new_yl);


Ich will nicht ausschließen, dass es einfachere Möglichkeiten gibt ;)

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
 
ueg
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 51
Anmeldedatum: 15.08.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.03.2020, 01:09     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für deine Hilfe!
Kein Problem, dass die Antwort etwas "länger" gedauert hat. Ohne dich wär hier gefühlt nichts los außer Fragen. Smile

Deine Lösung funktioniert einwandfrei.

Viele Grüße
Tim
Private Nachricht senden Benutzer-Profile anzeigen
 
Oelfinger
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 01.05.20
Wohnort: ---
Version: 2020a
     Beitrag Verfasst am: 01.05.2020, 16:31     Titel:
  Antworten mit Zitat      
Hallo,

ich habe auch gerade angefangen mit Matlab zu arbeiten. Dabei hatte ich das gleiche Problem, wie es oben schon beschrieben wurde. Die Lösung von Harald hat mir dabei geholfen. Allerdings stehe ich jetzt vor einem weiteren Problem.

Ich würde gerne zusätzlich noch die Zahlen an den Achsen auf zwei bzw. drei Stellen nach dem Komma runden. Hiermit habe ich es bereits versucht:

Code:
xticks = get(gca, 'XTick');
set(gca, 'XTickLabel', num2str(xticks', '%.2f'))

yticks = get(gca, 'YTick');
set(gca, 'YTickLabel', num2str(yticks', '%.3f'))
 


Der o.g. Code von Harald, wird dann aber überschrieben. D.h. es stehen zwar die gerundeten Zahlen an den Achsen aber wieder mit Punkten statt Kommas.

Ich hoffe jemand hat ein paar Tipps für mich.

Viele Grüße
Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.05.2020, 17:19     Titel:
  Antworten mit Zitat      
Hallo,

du kannst strrep auf das Ergebnis von num2str anwenden.
Code:
set(gca, 'XTickLabel', strrep(num2str(xticks', '%.2f'), '.', ',')


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
 
Oelfinger
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 01.05.20
Wohnort: ---
Version: 2020a
     Beitrag Verfasst am: 02.05.2020, 00:16     Titel:
  Antworten mit Zitat      
Hallo Harald,

erst einmal danke für die schnelle Antwort.
Ich musste die Zeile noch etwas anpassen aber jetzt funktioniert es.

Code:
set(gca, 'XTickLabel', strrep(cellstr(num2str(xticks', '%.0f')), '.', ','));


Viele Grüße
Oli
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.