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

einzelne Balken im Balkendiagramm beschriften

 

VonKrolock
Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 26.03.15
Wohnort: Bochum
Version: ---
     Beitrag Verfasst am: 27.03.2015, 10:23     Titel: einzelne Balken im Balkendiagramm beschriften
  Antworten mit Zitat      
Hallo Leute,

ich habe ein Balkendiagramm vorliegen, von dem ich nun die einzelnen Balken beschriften möchte. Und zwar habe ich auf der x-Achse 47 Balken abgetragen, die aber nicht in der Reihenfolge 1....47 dort auftauchen, sondern in Reihenfolge einer vorher berechneten Reihenfolge, die order heißt.

Mein bisheriger Befehl sieht so aus - aber es tut sich nichts.
Wie kann ich das angleichen?
Code:
[SetOfClusters, RD, CD, order] = cluster_optics3(Beispielsortiment, 4,15);
bar(RD(order));
figure;
%Cycle through all clusters
for i = 2:length(SetOfClusters)
    bar(RD(order(SetOfClusters(i).start:SetOfCluster(i).end)));
    set(gca, 'XTickLabel', order)
    pause(0.5)
end

[SetOfClusters, RD, CD, order] = cluster_optics3(Beispielsortiment, 4,15);
bar(RD(order));
figure;
%Cycle through all clusters
for i = 2:length(SetOfClusters)
    bar(RD(order(SetOfClusters(i).start:SetOfCluster(i).end)));
    str = 'order'
    set(gca, 'XTickLabel', 1:numel(str))
pause(0.5)
end


Beide Versuche führen nicht zum gewünschten Ergebnis Sad
Danke schonmal für eure Hilfe!

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen


Knygs
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 26.03.15
Wohnort: ---
Version: 2015b, 2017a, 2021a
     Beitrag Verfasst am: 27.03.2015, 11:20     Titel:
  Antworten mit Zitat      
Hi VonKrolock,

wenn ich das mit zufälligen Balken mache und dann meine x-Achse willkürlich mit set(gca, 'XTickLabel', order)
beschrifte funktioniert es.

Wie groß ist bei dir denn der Wert length(SetOfClusters)? wird die for-Schleife, in der die Achse umbenannt wird wirklich aufgerufen?
Wie kommen denn die Werte in
Code:

[SetOfClusters, RD, CD, order] = cluster_optics3(Beispielsortiment, 4,15);
 

zustande? Und welche Struktur haben sie?
Da ich cluster_optics3 nicht in google finde nehme ich an, dass es eine selbstgeschriebene Funktion ist?

vg
Private Nachricht senden Benutzer-Profile anzeigen
 
VonKrolock
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 26.03.15
Wohnort: Bochum
Version: ---
     Beitrag Verfasst am: 27.03.2015, 13:38     Titel:
  Antworten mit Zitat      
Hi Knygs,

nein, es handelt sich hierbei um eine fertige Funktion. Da ich aber vorher ein paar Sachen selbst ausprobiert habe, ist es letztendlich Cluster_optics3 geworden. Ich kopiere den Code mal hier rein:
% -------------------------------------------------------------------------------------------
% Diese Funktion greift auf obigen Algorithmus von Ankerst, Mihael, et al. Zurück
% ----------------------------------------------------------------------------------
% Written by Alex Kendall
% University of Cambridge
% 18 Feb 2015
% http://mi.eng.cam.ac.uk/~agk34/
% This software is licensed under GPLv3, see included glpv3.txt.
% -------------------------------------------------------------------------------------------
% Input:
% points - Beispielsortiment, welches geclustert werden soll
% Die Artikel bilden die einzelnen Zeilen und die Spalten sind
% die Datendimensionen
% minpts - Anzahl der Mindestartikel in einem Cluster
% epsilon - Schwelle, um ein Cluster zu bilden
% -------------------------------------------------------------------------------------------
% Output:
% SetOfClusters - gibt Start- und Endindizes der einzelnen Cluster an
% RD - Erreichbarkeitsdistanz von jedem Artikel
% CD - Kerndistanz von jedem Artikel
% order - Reihenfolge der Punkte im Erreichbarkeitsgraphen
% -------------------------------------------------------------------------------------------
% Dependencies:
% This function requires optics.m from Michal Daszykowski's implementation of calculating the
% reachability distance for all points. For more details, refer to
% http://chemometria.us.edu.pl/index.php?goto=downloads

disp('Calculating reachability for all points.');
29 tic;
30
31 [RD,CD,order]=optics(points,minpts);
32 toc;
33

34 disp('Computing clusters.');
35 tic;
36 mib = 0;
37 i = 1;
38 SetOfSteepDownAreas = struct();
39 SetOfClusters = struct();
40

41 while i < size(points,1)-1
42 mib = max([mib, RD(order(i))]);
43 if RD(order(i))*(1-epsilon) >= RD(order(i+1))
44 % update mib values and filter down areas
45 for k=2:size(SetOfSteepDownAreas,2)
46 SetOfSteepDownAreas(k).mib = max(RD(order((SetOfSteepDownAreas(k).end+1):i)));
47 end
48 k=2;
49 while k<=size(SetOfSteepDownAreas,2)
50 if RD(order(SetOfSteepDownAreas(k).start))*(1-epsilon) < mib
51 if k==size(SetOfSteepDownAreas,2)
52 SetOfSteepDownAreas = SetOfSteepDownAreas(1:k-1);
53 else
54 SetOfSteepDownAreas = SetOfSteepDownAreas([1:k-1, k+1:size(SetOfSteepDownAreas,2)]);
55 end
56 else
57 k = k+1;
58 end
59 end
60
61 newD = size(SetOfSteepDownAreas,2)+1;
62 SetOfSteepDownAreas(newD).start = i;
63 SetOfSteepDownAreas(newD).mib = 0;
64
65 % find end of downward area
66 while i < size(points,1)-1
67 if RD(order(i))*(1-epsilon) >= RD(order(i+1))
68 i = i+1;
69 else
70 j = i;
71 while j < size(points,1)-1
72 if or(j-i>minpts, RD(order(j)) < RD(order(j+1)))
73 % if the downward area that isn't steep is longer than minpts, or no longer downward
74 j=-1;
75 break;
76 elseif RD(order(j))*(1-epsilon) >= RD(order(j+1))
77 % if it is a steepdownward area
78 break;
79 else
80 j = j+1;
81 end
82 end
83
84 if or(j == -1, j == size(points,1)-1)
85 % end of downward area
86 break;
87 else
88 i = j;
89 end
90 end
91 end
92
93 SetOfSteepDownAreas(newD).end = i-1;
94 mib = RD(order(i));
95
96 elseif RD(order(i)) <= RD(order(i+1))*(1-epsilon)
97 % Up area
98 upAreaStart = i;
99 % update mib values and filter down areas
100 for k=2:size(SetOfSteepDownAreas,2)
101 SetOfSteepDownAreas(k).mib = max(RD(order(SetOfSteepDownAreas(k).end:i)));
102 end
103 k=2;
104 while k<=size(SetOfSteepDownAreas,2)
105 if RD(order(SetOfSteepDownAreas(k).start))*(1-epsilon) < mib
106 if k==size(SetOfSteepDownAreas,2)
107 SetOfSteepDownAreas = SetOfSteepDownAreas(1:k-1);
108 else
109 SetOfSteepDownAreas = SetOfSteepDownAreas([1:k-1, k+1:size(SetOfSteepDownAreas,2)]);
110 end
111 else
112 k = k+1;
113 end
114 end
115
116
117 % find end of upward area
118 while i < size(points,1)-1
119 if RD(order(i)) <= RD(order(i+1))*(1-epsilon)
120 i = i+1;
121 else
122 j = i;
123 while j < size(points,1)-1
124 if or(j-i>minpts, RD(order(j)) > RD(order(j+1)))
125 % if the upward area that isn't steep is longer than minpts, or no longer upward
126 j=-1;
127 break;
128 elseif RD(order(j)) <= RD(order(j+1))*(1-epsilon)
129 % if it is a steepdownward area
130 break;
131 else
132 j = j+1;
133 end
134 end
135
136 if or(j == -1, j== size(points,1)-1)
137 % end of downward area
138 break;
139 else
140 i = j;
141 end
142 end
143 end
144
145 mib = RD(order(i));
146
147 for k=2:size(SetOfSteepDownAreas,2)
148 if RD(order(i))*(1-epsilon) > SetOfSteepDownAreas(k).mib
149 if and(RD(order(SetOfSteepDownAreas(k).start)) >= RD(upAreaStart) , RD(order(SetOfSteepDownAreas(k).end)) <= RD(order(i)))
150 if abs(RD(order(SetOfSteepDownAreas(k).start))-RD(order(i))) <= epsilon*max(RD(order(SetOfSteepDownAreas(k).start)),RD(order(i)))
151 % condition a
152 clusterStart = SetOfSteepDownAreas(k).start;
153 clusterEnd = i;
154 elseif RD(order(SetOfSteepDownAreas(k).start))*(1-epsilon) > RD(order(i))
155 % condition b
156 tmp = abs(RD(SetOfSteepDownAreas(k).start:SetOfSteepDownAreas(k).end)-RD(order(i)));
157 [~, clusterStart] = min(tmp); %index of closest value
158 clusterStart = clusterStart+SetOfSteepDownAreas(k).start-1;
159 clusterEnd = i;
160 elseif RD(order(SetOfSteepDownAreas(k).start)) < RD(order(i))*(1-epsilon)
161 % condition c
162 clusterStart = SetOfSteepDownAreas(k).start;
163 tmp = abs(RD(upAreaStart:i)-RD(order(SetOfSteepDownAreas(k).start)));
164 [~, clusterEnd] = min(tmp); %index of closest value
165 clusterEnd = clusterEnd+upAreaStart;
166 else
167 error('ERROR\n');
168 end
169
170 if abs(clusterEnd - clusterStart) >= minpts
171 newD = size(SetOfClusters,2)+1;
172 SetOfClusters(newD).start = clusterStart;
173 SetOfClusters(newD).end = clusterEnd;
174 end
175 end
176 end
177 end
178
179 else
180 i = i+1;
181 end
182 end
183

184 SetOfClusters = SetOfClusters(2:size(SetOfClusters,2));
185 toc;
186

187 end


Und wenn ich mir das mit folgendem Befehl zeichnen lasse, dann erhalte ich beigefügtes Bild. Allerdings sind die Balken von 1 - 47 chronologisch nummeriert. Wenn ich aber nur Optics durchlaufen lasse (also die Funktion, auf die hier zurückgegriffen wird), dann sollen die in folgender Reihenfolge sein:

order =
Columns 1 through 21
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
Columns 22 through 42
22 23 24 25 26 27 28 29 31 30 32 33 35 36 37 38 39 40 42 41 43
Columns 43 through 47
45 46 47 34 44

Ist das irgendwie verständlich?

mindestens 2 pro Cluster Epsilon 25.jpg
 Beschreibung:

Download
 Dateiname:  mindestens 2 pro Cluster Epsilon 25.jpg
 Dateigröße:  17.3 KB
 Heruntergeladen:  366 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Knygs
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 26.03.15
Wohnort: ---
Version: 2015b, 2017a, 2021a
     Beitrag Verfasst am: 27.03.2015, 14:23     Titel:
  Antworten mit Zitat      
Bitte binde den Code doch mit den Code-Butons ein, das macht es deutlich übersichtlicher.
Und das hilft mir leider nicht wirklich weiter.
Die Funktion, auf die deine Kopie sich bezieht ist nämlich auch keine Standard-Funktion und sich jetzt, in diesem Fall, in zwei andere Funktionen so reinzuarbeiten wäre ein bisschen viel Aufwand.
Ich muss nur wissen, wie die Daten aufgebaut sind, die du reinsteckst und wie die Daten aussehen, die wieder rauskommen.

"Und wenn ich mir das mit folgendem Befehl zeichnen lasse..." welchen folgenden Befehl meinst du? Es folgt leider keiner.

An sich dürfte das aber alles keine Auswirkung auf den Plot haben.
Versuchs mal, indem du deine x-Achse mit XTicks in entsprechend viele Teilstücke aufteilst:
Code:

set(gca,'XTick', 1:length(y)/length(order):length(y),'XTicklabel',order)

Das, was bei mir length(y) ist müsste bei dir
Code:

length(RD(order(SetOfClusters(i).start:SetOfCluster(i).end)))

sein.
Es kann nämlich sein, dass durch zu wenig vorhandene Xticks auf der Achse Matlab nicht weiß wie es sie benennen soll.

Edit:
wenn es immer 47 Balken sind kannst du auch schreiben:
Code:

set(gca,'XTick', 1:47,'XTicklabel',order)
Private Nachricht senden Benutzer-Profile anzeigen
 
VonKrolock
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 26.03.15
Wohnort: Bochum
Version: ---
     Beitrag Verfasst am: 27.03.2015, 15:08     Titel:
  Antworten mit Zitat      
Sorry, habe vergessen den Code reinzukopieren Smile
Code:
[SetOfClusters, RD, CD, order] = cluster_optics3(Beispielsortiment, 2,25);
bar(RD(order));
figure;
%Cycle through all clusters
for i = 2:length(SetOfClusters)
    bar(RD(order(SetOfClusters(i).start:SetOfCluster(i).end)));
    pause(0.5)
end
 


Deine Codes haben leider nicht geholfen Sad Ich habe beide Varianten nach pause(0.5) reinkopiert. Trotzdem danke für deine Hilfe!
Der Graph wird immer noch so angezeigt, als wenn Artikel 47 der letzte Balken ist. Aber das ist ja 44.

Das sind übrigens die In- und Outputs der Funktion:
% Input:
% points - Beispielsortiment, welches geclustert werden soll
% Die Artikel bilden die einzelnen Zeilen und die Spalten sind
% die Datendimensionen
% minpts - Anzahl der Mindestartikel in einem Cluster
% epsilon - Schwelle, um ein Cluster zu bilden
% -------------------------------------------------------------------------------------------
% Output:
% SetOfClusters - gibt Start- und Endindizes der einzelnen Cluster an
% RD - Erreichbarkeitsdistanz von jedem Artikel
% CD - Kerndistanz von jedem Artikel
% order - Reihenfolge der Punkte im Erreichbarkeitsgraphen

Wenn ich nur Optics aufrufe, erhalte ich: RD, CD und order
Wenn ich cluster_optics aufrufe, dann erhalte ich:

cluster_optics3(Beispielsortiment, 2, 25)
Calculating reachability for all points.
Elapsed time is 0.003259 seconds.
Computing clusters.
Elapsed time is 0.000490 seconds.

ans =

1x0 struct array with no fields.

Ich sehe aber doch am Graphen, dass da was rauskommen muss.
Private Nachricht senden Benutzer-Profile anzeigen
 
Knygs
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 26.03.15
Wohnort: ---
Version: 2015b, 2017a, 2021a
     Beitrag Verfasst am: 27.03.2015, 15:28     Titel:
  Antworten mit Zitat      
hmm...
kannst du mal Beispieldaten oder deinen obigen Graphen als figure hochladen, damit ich ihn in Matlab laden kann?
Private Nachricht senden Benutzer-Profile anzeigen
 
VonKrolock
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 26.03.15
Wohnort: Bochum
Version: ---
     Beitrag Verfasst am: 27.03.2015, 15:40     Titel:
  Antworten mit Zitat      


Optics.pdf
 Beschreibung:

Download
 Dateiname:  Optics.pdf
 Dateigröße:  95.19 KB
 Heruntergeladen:  428 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
VonKrolock
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 26.03.15
Wohnort: Bochum
Version: ---
     Beitrag Verfasst am: 27.03.2015, 15:41     Titel:
  Antworten mit Zitat      


Beispielsortiment.pdf
 Beschreibung:

Download
 Dateiname:  Beispielsortiment.pdf
 Dateigröße:  114.08 KB
 Heruntergeladen:  470 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Knygs
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 26.03.15
Wohnort: ---
Version: 2015b, 2017a, 2021a
     Beitrag Verfasst am: 27.03.2015, 15:49     Titel:
  Antworten mit Zitat      
ich dachte eher an etwas matlab-kompatibles, so wie es z.B. FPC hier http://www.gomatlab.de/viewtopic,p,147380.html#147380
gemacht hat
Private Nachricht senden Benutzer-Profile anzeigen
 
VonKrolock
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 26.03.15
Wohnort: Bochum
Version: ---
     Beitrag Verfasst am: 27.03.2015, 15:58     Titel:
  Antworten mit Zitat      
Oh, sorry ^^
Meinst du das so?

mind 2 Artikel pro Cluster Epsilon 25.fig
 Beschreibung:

Download
 Dateiname:  mind 2 Artikel pro Cluster Epsilon 25.fig
 Dateigröße:  4.07 KB
 Heruntergeladen:  358 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Knygs
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 26.03.15
Wohnort: ---
Version: 2015b, 2017a, 2021a
     Beitrag Verfasst am: 27.03.2015, 16:07     Titel:
  Antworten mit Zitat      
genau, so mein ichs Wink

also wenn ich jetzt den Graphen als aktives figure da hab und folgenden Befehl ausführe:
Code:
set(gca,'XTick', 1:47,'XTicklabel',order)

dann bekomme ich folgenden graphen:
bei mir funktioniert es also, ich kann mir nicht erklären, wieso bei dir nicht...hat dein order vielleicht eine andere Datenstruktur?

mind_2_Artikel_pro_Cluster_Epsilon_25[1].fig
 Beschreibung:

Download
 Dateiname:  mind_2_Artikel_pro_Cluster_Epsilon_25[1].fig
 Dateigröße:  5.91 KB
 Heruntergeladen:  371 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
VonKrolock
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 26.03.15
Wohnort: Bochum
Version: ---
     Beitrag Verfasst am: 27.03.2015, 16:11     Titel:
  Antworten mit Zitat      
An welche Stelle schreibst du das denn hin? Ich habe das so eingetippt:
Code:

[SetOfClusters, RD, CD, order] = cluster_optics3(Beispielsortiment, 2,25);
bar(RD(order));
figure;
%Cycle through all clusters
for i = 2:length(SetOfClusters)
    bar(RD(order(SetOfClusters(i).start:SetOfCluster(i).end)));
    pause(0.5)
    set(gca,'XTick', 1:47,'XTicklabel',order)
end
 


Und dann verändert sich nichts.
Private Nachricht senden Benutzer-Profile anzeigen
 
VonKrolock
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 26.03.15
Wohnort: Bochum
Version: ---
     Beitrag Verfasst am: 27.03.2015, 16:12     Titel:
  Antworten mit Zitat      
Ich habs schon: Es gehört vor figure.
Private Nachricht senden Benutzer-Profile anzeigen
 
VonKrolock
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 26.03.15
Wohnort: Bochum
Version: ---
     Beitrag Verfasst am: 27.03.2015, 16:13     Titel:
  Antworten mit Zitat      
Vielen vielen Dank für deine Hilfe und auch Geduld!
Ich stand heute wirklich auf der langen Leitung.
Nicht jeder versucht dann weiterhin zu helfen!
Private Nachricht senden Benutzer-Profile anzeigen
 
Knygs
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 26.03.15
Wohnort: ---
Version: 2015b, 2017a, 2021a
     Beitrag Verfasst am: 27.03.2015, 16:37     Titel:
  Antworten mit Zitat      
ich habe es einfach in die kommandozeile getippt.
Aber dann ist ja jetzt alles gut ;-)
Dann war die figure wohl zum Zeitpunkt des Befehls nicht mehr aktiv.

Kein Problem, freut mich, wenn ich dir helfen konnte ;-)
und ich wollte ja dann auch wissen, wieso es bei dir nicht funktioniert und bei mir schon.
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.