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 Breite programmieren...HILFE

 

mahi_mahi
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 25.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.02.2010, 11:17     Titel: Balkendiagramm Breite programmieren...HILFE
  Antworten mit Zitat      
Hi Leute,
ich versuche ein Balkendiagramm zu erstellen, worin ich die Ergebnisse von verschiedenen Studien wiedergebe. Ich möchte, dass die Studien mit den meist befragten Patienten durch einen breiteren Balken erkennbar werden.

Habe als Beispiel schonmal ein Balkendiagramm erstellt, worin man die Prozentzahlen der jeweiligen Antworten erkennt. Nun soll aber ein dritter Vektor z mit berücksichtigt werden, der die Anzahl der Teilnehmer an der jeweiligen Studie wiedergibt.


x=(1:6)
y=[70 20 10;30 40 30;93 2 5; 65 25 10; 20 50 30;88 2 10]
barh(x,y,'stacked')

z=[33 545 200 300 64 888]

Ich wäre euch seehr dankbar, wenn ihr mir da weiterhelfen könntet. Habe leider noch nie ein Balkendiagramm selbst programmiert.

Mahi
Private Nachricht senden Benutzer-Profile anzeigen


Jan*
Forum-Century

Forum-Century


Beiträge: 178
Anmeldedatum: 06.11.09
Wohnort: ---
Version: R2007b
     Beitrag Verfasst am: 25.02.2010, 11:24     Titel:
  Antworten mit Zitat      
Hi,

es gibt ein Parameter um die Balkenbreite zu verändern:

Zitat:
bar(...,width) sets the relative
bar width and controls the separation of bars within a group. The default width is 0.8,
so if you do not specify x, the bars within a group have
a slight separation. If width is 1,
the bars within a group touch one another.


der gilt jedoch für alle geplotteten Balken. Das heißt du musst jeden Balken in einem eigenen plot erstellen, und diese mit hold on überlagern:

Code:

bar([1 2], [3 5], 0.5)
hold on
bar([3 4], [1 6],0.9)


Das lässt sich dann entsprechend in einer Schleife automatisieren.

Gruß Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
mahi_mahi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 25.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.02.2010, 11:28     Titel:
  Antworten mit Zitat      
hey,

danke für die schnelle Antwort. Könntest du mir vielleicht für mein Beispiel einen Ansatz geben? Habe einfach keinen Plan...

Gruß,
Mahi
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan*
Forum-Century

Forum-Century


Beiträge: 178
Anmeldedatum: 06.11.09
Wohnort: ---
Version: R2007b
     Beitrag Verfasst am: 25.02.2010, 11:55     Titel:
  Antworten mit Zitat      
Hi,

mit stacked graph geht das nur mit trick17, weil man hier 'eigentlich' keinen Balken alleine zeichnen kann. Daher ist das etwas unelegant, geht aber so weit:

Code:
x=(1:6);
y=[70 20 10;30 40 30;93 2 5; 65 25 10; 20 50 30;88 2 10];
figure;

z=[33 545 200 300 64 888];

for cnt = 1:length(x)
    barh(cnt:cnt+5,[y(cnt,:); zeros(5,3)],z(cnt)./max(z),'stacked')
    hold on
end
ylim([0 7])


Gruß Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
mahi_mahi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 25.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.02.2010, 11:58     Titel:
  Antworten mit Zitat      
wow.. das sieht ja richtig gut aus! Wenn du mir nur noch sagen könntest, was wofür steht... Very Happy

danke!!!!!!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan*
Forum-Century

Forum-Century


Beiträge: 178
Anmeldedatum: 06.11.09
Wohnort: ---
Version: R2007b
     Beitrag Verfasst am: 25.02.2010, 12:11     Titel:
  Antworten mit Zitat      
Es sieht deshalb etwas chaotisch aus, weil man jedes Mal mindestens zwei Balkenreihen zeichnen muss. Der Bar graph setzt die Achsenbeschriftung aber nur da korrekt, wo im ersten Plot Balken gezeichnet werden. Deshalb lasse ich in jedem Schleifendurchlauf 6 Balken malen, wobei davon 5 Stück leer sind, dafür sind die zeros da. So kann man sich das nachträgliche hinzufügen der xticks sparen. Vor dem stacked wird die jeweilige Balkenbreite übergeben, die auf das Maximum von z normiert werden muss, damit die Balken nicht breiter als 1 werden. Wenn sie dir zu schmal sind, kannst du da noch einen Faktor ala 1.25 vorhängen. Damit die 5 'leeren' balken nicht angezeigt werden, muss die y-Achse noch mit ylim angepasst werden.

Gruß Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
mahi_mahi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 25.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.02.2010, 12:22     Titel:
  Antworten mit Zitat      
du hast mir richtig weitergeholfen! dafür 1000mal Danke.

Aber eins noch: wofür steht cnt? Sorry, bin noch Anfängerin Wink

und wenn ich das ganze Allgemein gestalten will, muss es also lauten:

cnt+(length(x)-1)
zeros((length(x)-1),???); Was müsste ich für 3 einsetzen?

und zum Schluss ylim([0 (length(x)+1)])

??
Danke im Voraus
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan*
Forum-Century

Forum-Century


Beiträge: 178
Anmeldedatum: 06.11.09
Wohnort: ---
Version: R2007b
     Beitrag Verfasst am: 25.02.2010, 12:45     Titel:
  Antworten mit Zitat      
cnt ist der Schleifenzähler, der in jedem Schleifendurchlauf von 1 bis zur Anzahl der Balken inkrementiert wird, da musst du also nichts mehr dran ändern.

Bei den Nullen muss mit der Anzahl der Werte pro Balken aufgefüllt werden, die bekommst du mit size heraus:

Code:


ylim passt so wie du es geschrieben hast.

Gruß Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
mahi_mahi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 25.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.02.2010, 12:48     Titel:
  Antworten mit Zitat      
Super Smile
Ich danke Dir!
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.