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

Bar-Plot mit % auf y-Achse und Name auf x-Achse

 

mgaberni
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 12.09.17
Wohnort: ---
Version: 2016a
     Beitrag Verfasst am: 19.09.2017, 11:07     Titel: Bar-Plot mit % auf y-Achse und Name auf x-Achse
  Antworten mit Zitat      
Hallo,

Habe Kategorien (zB K1, K2,...) welchen Volumenwerte zugeordnet waren. Ich will nun von jeder Kategorie die Summe dieser Volumenwerte wissen bzw. diese als Verhältnis zu den anderen in % darstellen. Als Pie-Plot gelingt mir das, jedoch ist dies sehr unübersichtlich, da ich 20 Kategorien habe.
Mein Wunsch wäre es, die 20 Kategorien auf der X-Achse als Balken abzubilden und auf der y-Achse dann die % Anzahl zu sehen.
Hab es schon mit 'categorial' versucht, denke das funktioniert jedoch bei mir nicht, da diese Funktion ja nur zählt, wie oft die Kategorie vorkommt und das hilft mir nichts.
Bin gerade am Lernen von Matlab und wäre daher für jede Hilfe sehr dankbar.

Die 1x20double gebirgsarten_S ist im Anhang.

Mein Code:
Code:
%Südröhre mit Gebirgsarten K1-K12, K16-20, K22, K26-27
figure('Name', 'Verteilung Gebirgsarten Südröhre', 'NumberTitle', 'off');
gebirgsarten_S(1) = nansum([GebirgsartenSued{strcmp(GebirgsartenSued(:,5),cellstr('GA K1')),8}]);
gebirgsarten_S(2) = nansum([GebirgsartenSued{strcmp(GebirgsartenSued(:,5),cellstr('GA K2')),8}]);
gebirgsarten_S(3) = nansum([GebirgsartenSued{strcmp(GebirgsartenSued(:,5),cellstr('GA K3')),8}]);
gebirgsarten_S(4) = nansum([GebirgsartenSued{strcmp(GebirgsartenSued(:,5),cellstr('GA K4')),8}]);
gebirgsarten_S(5) = nansum([GebirgsartenSued{strcmp(GebirgsartenSued(:,5),cellstr('GA K5')),8}]);
gebirgsarten_S(6) = nansum([GebirgsartenSued{strcmp(GebirgsartenSued(:,5),cellstr('GA K6')),8}]);
gebirgsarten_S(7) = nansum([GebirgsartenSued{strcmp(GebirgsartenSued(:,5),cellstr('GA K7')),8}]);
gebirgsarten_S(8) = nansum([GebirgsartenSued{strcmp(GebirgsartenSued(:,5),cellstr('GA K8')),8}]);
gebirgsarten_S(9) = nansum([GebirgsartenSued{strcmp(GebirgsartenSued(:,5),cellstr('GA K9')),8}]);
gebirgsarten_S(10) = nansum([GebirgsartenSued{strcmp(GebirgsartenSued(:,5),cellstr('GA K10')),8}]);
gebirgsarten_S(11) = nansum([GebirgsartenSued{strcmp(GebirgsartenSued(:,5),cellstr('GA K11')),8}]);
gebirgsarten_S(12) = nansum([GebirgsartenSued{strcmp(GebirgsartenSued(:,5),cellstr('GA K12')),8}]);
gebirgsarten_S(13) = nansum([GebirgsartenSued{strcmp(GebirgsartenSued(:,5),cellstr('GA K16')),8}]);
gebirgsarten_S(14) = nansum([GebirgsartenSued{strcmp(GebirgsartenSued(:,5),cellstr('GA K17')),8}]);
gebirgsarten_S(15) = nansum([GebirgsartenSued{strcmp(GebirgsartenSued(:,5),cellstr('GA K18')),8}]);
gebirgsarten_S(16) = nansum([GebirgsartenSued{strcmp(GebirgsartenSued(:,5),cellstr('GA K19')),8}]);
gebirgsarten_S(17) = nansum([GebirgsartenSued{strcmp(GebirgsartenSued(:,5),cellstr('GA K20')),8}]);
gebirgsarten_S(18) = nansum([GebirgsartenSued{strcmp(GebirgsartenSued(:,5),cellstr('GA K22')),8}]);
gebirgsarten_S(19) = nansum([GebirgsartenSued{strcmp(GebirgsartenSued(:,5),cellstr('GA K26')),8}]);
gebirgsarten_S(20) = nansum([GebirgsartenSued{strcmp(GebirgsartenSued(:,5),cellstr('GA K27')),8}]);

%c = categorical({'GA K1','GA K2','GA K3','GA K4','GA K5','GA K6','GA K7','GA K8','GA K9','GA K10','GA K11','GA K12','GA K16','GA K17','GA K18','GA K19','GA K20','GA K22','GA K26','GA K27'});
bar(gebirgsarten_S);
labels = {'GA K1','GA K2','GA K3','GA K4','GA K5','GA K6','GA K7','GA K8','GA K9','GA K10','GA K11','GA K12','GA K16','GA K17','GA K18','GA K19','GA K20','GA K22','GA K26','GA K27'};
legend(labels,'Location','southeastoutside');
title('Verteilung Gebirgsarten Südröhre');
mymap = [0.6 0.6 0.8;%hellviolett
        0.4 0.4 0.8; %dunkelviolett
        0.6 0.8 1.0; %hellblau
        0.2 0.4 0.8; %dunkelblau
        0.6 0.8 0.6; %türkisgrün
        0.4 0.6 0.4; %hellgrün
        0.2 0.4 0.2; %dunkelgrün
        0.4 0.4 0.0; %olivgrün
        0.6 0.4 0.2; %braun
        0.6 0.6 0.6; %hellgrau
        0.4 0.4 0.4; %dunkelgrau
        1.0 0.9 0.4; %gelb
        1.0 0.8 0.4; %creme
        1.0 0.5 0.15; %orange
        0.8 0.2 0.2] %rot
colormap(mymap);
set(gcf,'Position',[500 500 800 400]); % Größe der Grafik bzw. Breite/ Höhe


gebirgsarten_S.mat
 Beschreibung:

Download
 Dateiname:  gebirgsarten_S.mat
 Dateigröße:  331 Bytes
 Heruntergeladen:  252 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: 19.09.2017, 12:48     Titel:
  Antworten mit Zitat      
Hallo,

ich verstehe vielleicht die Frage nicht ganz. Falls ich sie richtig verstehe, helfen categorical sehr wohl. Mini-Beispiel:

Code:
data = 1:3;
cats = categorical({'A', 'B', 'C'});
bar(cats, data./sum(data))


Das funktioniert so allerdings erst im aktuellen Release.

Solltest du ein älteres Release verwenden, gib das bitte an und trage es am besten ins Profil ein. Falls ich die Frage falsch verstehe, bitte anhand der Daten mal darstellen, welches Ergebnis gewünscht ist.

Grüße,
Harald

P.S. Das Erstellen der Gebirgsarten kann man in einer for-Schleife erledigen oder, noch besser, mit findgroups/splitapply.
Private Nachricht senden Benutzer-Profile anzeigen
 
mgaberni
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 12.09.17
Wohnort: ---
Version: 2016a
     Beitrag Verfasst am: 19.09.2017, 13:49     Titel: Bar-Plot mit % auf y-Achse und Name auf x-Achse
  Antworten mit Zitat      
Hallo,

ich habe Version 2016a, also leider nicht das neueste Release.
Ich habe es schon versucht mit:

Code:
c = categorical({'GA K1','GA K2','GA K3','GA K4','GA K5','GA K6','GA K7','GA K8','GA K9','GA K10','GA K11','GA K12','GA K16','GA K17','GA K18','GA K19','GA K20','GA K22','GA K26','GA K27'});
bar(c,gebirgsarten_S./sum(gebirgsarten_S));
 


jedoch beschriftet mir Matlab so die einzelnen Gruppen nicht. Auch dein Mini-Beispiel habe ich probiert, denke aber auf Grund der älteren Version funktioniert das auch nicht. Habe nämlich die Matlab Documentation durchsucht und bin auf genau das gekommen, jedoch wird das bei mir dann eben nicht so dargestellt.

Danke für den tollen Tipp mit findgroups/splitapply das hilft mir wirklich und diese Funktion macht auch viel mehr Sinn, als meine Version davor. Wenn ich jedoch folgendes probiere, erstellt er mir GA sofort ohne Probleme so wie es sein soll. will ich jedoch splitapply anwenden, so bekomme ich folgende Fehlermeldung:
GA = 1537x1 double und VGA = 1537x1 cell

'Undefined function 'sum' for input arguments of type 'cell'.'

Mein Code:

Code:
GA = findgroups(GebirgsartenSued(:,5));
VGA = GebirgsartenSued(:,8);
splitapply(@sum,VGA,GA);


Muss ich hier cellfun verwenden? - Habe es probiert, aber dann geht's leider auch nicht.
Bei GebirgsartenSued handelt es sich übrigens um 1537x8 cell.

Vielen Dank!!!

GebirgsartenverteilungGeplanteGrafik.jpg
 Beschreibung:

Download
 Dateiname:  GebirgsartenverteilungGeplanteGrafik.jpg
 Dateigröße:  101.19 KB
 Heruntergeladen:  294 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: 19.09.2017, 14:15     Titel:
  Antworten mit Zitat      
Hallo,

dann als Workaround:
Code:
cats = {'A', 'B', 'C'};
bar(data./sum(data))
ax = gca;
ax.XTick = 1:numel(cats);
ax.XTickLabel = cats;


Wenn die achte Spalte nur Zahlen enthält, sollte dies klappen:
Code:
VGA = cell2mat(GebirgsartenSued(:,8));


Für GebirgsartenSued ist möglicherweise Table ein geeigneterer Datentyp. Kannst du ja mal versuchen.

Zitat:
Habe nämlich die Matlab Documentation durchsucht und bin auf genau das gekommen,

Innerhalb von MATLAB sollte das nicht passieren.
Wenn du online suchen willst, kannst du hier auf die passende Doku zugreifen:
https://www.mathworks.com/help/doc-archives.html

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 12.09.17
Wohnort: ---
Version: 2016a
     Beitrag Verfasst am: 19.09.2017, 15:04     Titel: Bar-Plot mit % auf y-Achse und Name auf x-Achse
  Antworten mit Zitat      
Hallo,

vielen Dank- das mit splitapply funktioniert nun einwandfrei-vielen Dank für das Aufmerksam machen auf diese Funktion!
Meine Grafik ist leider noch immer nicht so, wie ich sie gerne hätte, da mir nicht die Gebirgsart zum jeweiligen Balken angezeigt wird.
Darum meine Frage: wie kann ich nun auf die erstellten Gruppen zugreifen bzw. woher weiß ich welche Gebirgsart nun welcher Nummer zugeordnet ist? Oder muss ich für 'cats' das einfach händisch eingeben? (Die Reihenfolge stimmt ja nicht)

Code:
cats = {'GA K1','GA K2','GA K3','GA K4','GA K5','GA K6','GA K7','GA K8','GA K9','GA K10','GA K11','GA K12','GA K16','GA K17','GA K18','GA K19','GA K20','GA K22','GA K26','GA K27'};


Mir ist schon klar, dass ich nachsehen kann und dann händisch das eingebe, aber denke, dass es ja auch so gehen muss.

Ansonsten vielen herzlichen Dank für deine Hilfe!
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: 19.09.2017, 15:15     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
woher weiß ich welche Gebirgsart nun welcher Nummer zugeordnet ist?

Das zweite Rückgabeargument von findgroups verwenden.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 12.09.17
Wohnort: ---
Version: 2016a
     Beitrag Verfasst am: 19.09.2017, 15:19     Titel:
  Antworten mit Zitat      
Vielen Dank!
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.