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

Balkendiagramm

 

hoffi24
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 11.07.16
Wohnort: ---
Version: R2014a
     Beitrag Verfasst am: 22.08.2016, 11:21     Titel: Balkendiagramm
  Antworten mit Zitat      
Hallo,

ich möchte ein Balkendiagramm erstellen und schaffe es einfach nicht so wie ich es gerne hätte.

Das Layout soll etwa so sein wie im anhängenden Beispiel eines Excel Plots. Da ich aber alles in meiner Arbeit bisher mit Latex und Matlab gemacht habe sollte auch dieses Diagramm aus Matlab kommen.

Also zusammengefasst:


    - Positive Werte Grün, negative Rot.
    - Wert über bzw. unter dem Balken angezeigt
    - jeweils 2 Nachkommastellen
    - Die Prozentangaben am Balken sind nicht nötig
    - X-Achse besteht aus Text nicht aus Zahlen


Bisher habe ich folgendes geschafft / probiert
Code:

x=[1 2 3 4 5 6 7 8 9 10 11];
y=[0 1.939 21.045 17.661 20.078 24.792 -17.327 20.260 -25.337 -0.79 -16.685];
h=bar(y);
set(get(h,'children'),'cdata', sign(y) );
colormap([1 0 0; 0 0 1]);
set(gca,'XTickLabel',{'Referenz','Test1','Test2','Test3','Test4','Test5','Test6','Test7','Test8','Test9','Test10'})
str = num2str(y');
text(x,y,str,'horizontalalignment','center','verticalalignment','bottom')
 


Die Beschriftung der y-Achse und die Überschrift sind ansich kein Probelm...
Meine Probleme hier:

    - Die negativen Werte stehen im Balken
    - Die Werte der X-Achse sollten etwas gedreht werden


hoffe ihr könnt mit hierbei aushelfen.

gruß
hoffi24

Beispiel.PNG
 Beschreibung:

Download
 Dateiname:  Beispiel.PNG
 Dateigröße:  35.29 KB
 Heruntergeladen:  475 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.452
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.08.2016, 13:26     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Die negativen Werte stehen im Balken
Mit logischer Indizierung kannst du negative und positive y-Werte trennen. Bei den Balken mit negativen y-Werten kannst du
'verticalalignment','top'
setzen.

Zitat:
Die Werte der X-Achse sollten etwas gedreht werden

Ab 14b gibt es hierfür die Eigenschaft 'XTickLabelRotation. Davor gab es Lösungen auf File Exchange, z.B.
https://www.mathworks.com/matlabcen.....ge/3486-xticklabel-rotate

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 11.07.16
Wohnort: ---
Version: R2014a
     Beitrag Verfasst am: 22.08.2016, 13:46     Titel:
  Antworten mit Zitat      
Zitat:

Zitat:

Zitat:
Die negativen Werte stehen im Balken

Mit logischer Indizierung kannst du negative und positive y-Werte trennen. Bei den Balken mit negativen y-Werten kannst du
'verticalalignment','top'
setzen.


Was meinst du damit?? Also wie geht das?

Zitat:


Zitat:

Zitat:
Die Werte der X-Achse sollten etwas gedreht werden


Ab 14b gibt es hierfür die Eigenschaft 'XTickLabelRotation. Davor gab es Lösungen auf File Exchange, z.B.
https://www.mathworks.com/matlabcen.....ge/3486-xticklabel-rotate


Ich hab Version 14a, daher muss ich dann auf das zusatz Programm zurückgreifen. Wobei ich auch das nicht 100% verstehe... kann ich dieses Programm irgendwie mittels Befehl aufrufen und dabei sagen, bitte um 30° drehen???

Hoffe meine Fragen klingen gerade nicht allzu doof aber bin noch nicht so ganz fit in Matlab Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.452
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.08.2016, 13:55     Titel:
  Antworten mit Zitat      
Hallo,

zum ersten Teil:
Code:
str = cellstr(num2str(y'));
top = y>=0;
below = ~top;
text(x(top),y(top),str(top),'horizontalalignment','center','verticalalignment','bottom')
text(x(below),y(below),str(below),'horizontalalignment','center','verticalalignment','top')


zum zweiten Teil:
Unter Description ist ein Beispielaufruf aufgeführt, den du dann wohl statt dem set-XTickLabel-Befehl ausführen musst.

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

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 11.07.16
Wohnort: ---
Version: R2014a
     Beitrag Verfasst am: 22.08.2016, 14:40     Titel:
  Antworten mit Zitat      
Hi,
danke schon mal. Das sieht schon besser aus...

hab jetzt folgenden Code:
Code:

% Balkendiagramm

% Daten löschen
    clear all;
    close all;
    clc;
% Daten
    % X-Achse
        x=[1 2 3 4 5 6 7 8 9 10 11];
    % Y-Achse
        y=[0.00 1.94 21.05 17.66 20.08 24.79 -17.33 20.26 -25.34 -0.79 -16.69];
% Plot
    h=bar(y);
    % Farbe positiv und negativ
        set(get(h,'children'),'cdata', sign(y) );
        colormap([1 0 0; 0 1 0]);
    % X-Achse Beschriften
        set(gca,'XTickLabel',{'Referenz','Test1','Test2','Test3','Test4','Test5','Test6','Test7','Test8','Test9','Test10'});
        % Werte X-Achse drehen
            xticklabel_rotate;
    % Y-Achse
        ylabel('Abweichung [%]');
        set(gca,'FontSize',20);
    % Werte außerhalb des Balken schreiben
        str = num2str(y');
        str = cellstr(num2str(y'));
        top = y>=0;
        below = ~top;
        text(x(top),y(top),str(top),'horizontalalignment','center','verticalalignment','bottom','FontSize',20);
        text(x(below),y(below),str(below),'horizontalalignment','center','verticalalignment','top','FontSize',20);
 


Das Problem ist jetzt nur noch, dass die x-Achse damit die Schriftgröße nicht übernimmt und auch die Beschriftung der y-Achse nicht
Wenn das noch wäre, dann würd alles passen

Kann ich der Variable 'x' eigentlich auch direkt den Text zuweißen und dann trotzdem plotten???
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.452
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.08.2016, 20:26     Titel:
  Antworten mit Zitat      
Hallo,

halte dich doch an die unter Description vorgeschlagene Syntax:
Code:
xticklabel_rotate(x, 90, {'Referenz','Test1','Test2','Test3','Test4','Test5','Test6','Test7','Test8','Test9','Test10'}, 'FontSize', 20);


Und für die Beschriftung der y-Achse in der richtigen Größe:
Code:
ylabel('Abweichung [%]', 'FontSize', 20);


Ich kann nur empfehlen, die Doku der verwendeten Befehle zu lesen. In der Doku von ylabel ist u.a. ein Beispiel, wie man die Schriftgröße anpassen kann.

Grüße,
Harald
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.