Verfasst am: 22.06.2009, 12:59
Titel: Balken beschneiden mir axis
Hallo Leute,
ich versuche verweifelt mein Bar-Diagramm zu formatieren..
möchte dabei mit dem Befehl Axis ein YMin und YMax definieren also nur einen bestimmten Abschnitt der Y-Achse anzeigen.. Nun das zwar auch bei der Achse so gemacht, aber die Balken werden nicht eingekürzt.
Soll heißen, wenn ich YMin statt 0 auf 500 setzte, steht der Balken halt unten um 500 über...
Hallo.
Kannst du bitte mal den Code reinstellen? Eigentlich funktioniert der Axis-Befehl auch bei der BAR-Darstellung sehr gut. Oder hast du irgendwelche Abhängigkeiten von Maximal- und Minimalwert der Achse zur relativen/absoluten Häufigkeit der Balken?
Niceday
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 22.06.2009, 13:50
Titel:
Ich hab ein GUI gebastelt und dabei mit Axes eine Diagrammfläche eingesetzt. In diese lass ich nun mein Bar-Chart schreiben...
Alles funktioniert soweit auch, nur beim Axis befehl also: axis([xmin xmax ymin ymax)] werden zwar die Achsen auf den eingestellten Wert gesetzt, die Balken gehn aber einfach drüber hinweg
Weiß ned ob dir der Code weiterhilft is noch kaum kommentiert und ich mein typisches Programmierchaos:
Code:
function VorschauButton_Callback(hObject, eventdata, handles) % hObject handle to VorschauButton (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) run Vorschau
XWerte = evalin('base',['XWerte']);
YWerte = evalin('base',['YWerte']);
YWert = evalin('base',['YWert']);
XWert = evalin('base',['XWert']);
Label = evalin('base',['Label']);
XLabel = Label(XWert);
YLabel = Label(YWert);
SaNo = evalin('base',['SaNo']);
WertB = evalin('base',['WertB']);
WertY = evalin('base',['WertY']);
WertY = str2num(WertY);
SaNoY = evalin('base',['SaNoY']);
SaNoY = str2num(SaNoY);
MP = evalin('base',['MP']);
YMin = evalin('base',['YMin']);
YMax = evalin('base',['YMax']);
ProbenAnzahl = evalin('base',['ProbenAnzahl']);
if XWert == 108;
bar(YWerte, 'FaceColor', [10.60]);
else plot(XWerte, YWerte, '+');
set(gca, 'XColor','w', 'YColor','w','XGrid','on', 'GridLineStyle', '-') end
Im obigen Code hab ich statt axis auchmal YLim versucht - gleicher Effekt
Niceday
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 22.06.2009, 15:01
Titel:
Vielen Dank für deine Antwort!
Das funktioniert dann aber nur bei den Maxima, wie sehts damit aus wenn ich eine Minimum-Grenze angeben will.
Bsp:
Meine Werte sind alle knapp größer als 1000 - deshalb interessiert mich alles unter - sagen wir - 950 nicht und soll abgeschnitten werden.
Es sollen also nur die Balken in einem Bereich von 950 bei 1050 angezeigt werden... setz ich nun das untere Limit auf diesen Wert hängen die Balken einfach nach unten drüber.
Ah. Dann liegt es ja nicht am Axis-Befehl, sondern an der Darstellung. Am einfachsten wäre es wenn du den jeweiligen Ordinatenwert auf das Maximum der y-Achse setzt, falls dieser das Limit überscheitet
so in etwa:
Code:
mm=find(y_Werte>ymax);
y_Werte(mm)=ymax(mm);
%und dann der Bar-Befehl,....
Meine Werte sind alle knapp größer als 1000 - deshalb interessiert mich alles unter - sagen wir - 950 nicht und soll abgeschnitten werden.
Es sollen also nur die Balken in einem Bereich von 950 bei 1050 angezeigt werden... setz ich nun das untere Limit auf diesen Wert hängen die Balken einfach nach unten drüber.
Arbeitest du mit absoluten Häufigkeiten oder willst du dir nur Werte anzeigen lassen?
Also du hast dann ein grundsätzliches Problem mit der Darstellung, aber egal: Wenn du nur die Darstellung brauchts, dann zoom dich doch einfach in den richtigen Bereich rein. Vielleicht kannst du das misslungene Bild mal hochladen.
Bei mir klappt das eigentlich mit dem Abschneiden durch Axis(). Der Axis-Befehl sollte erst nach dem erstellen des Figures ausgeführt werden:
Ich will mir nur die Werte ausgeben lassen. Der Axis Befehl bzw. auch YLim kommt erst nachdem die Figure erstellt wurde..
Hatte das ganze auch schonmal einfach in ein Figure "plotten" lassen und dann ging auch... aber jetzt solls in einem GUI gezeichnet werden und da gehts nun nicht...
Ich versuch mal ein Bild hochzuladen...
Niceday
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 22.06.2009, 15:46
Titel:
..so habs nun endlich geschafft - musste ein paar Dinge verwischen:
Da sieht wirklich nicht schön aus. Muss es denn unbedengt der BAR-Befehl sein? Vielleicht kannst du ja auch über den Plot Befehl die einzelnen Ecken des jeweiligen Rechteckes setzen (Maximalwerte, Breite des Balkens und Minimalwerte) und dann die Fläche farbig machen. Das wäre natürlich sehr umständlich...
ich bin mir nicht sicher ob das einen Einfluss haben könnte, aber ich schreibe grundsätzlich den handle zu der jeweiligen axes (auch wenn es nur eine ist) sowohl in die plot (oder auch bar)-Aufrufe als auch in die Anpassungen (xLim, yLim, xlabel etc) und gerade bei GUIs vermeide ich die Verwendung von "gca", denn (du hast es wahrscheinlich mit GUIDE erstellt) die axes hat ja schon einen eindeutigen handle.
hmm.. besser wärs schon aber eigentlich is in meinem Kopf nur ein riesen wieso überhaupt das ganze ned funktioniert.. sonsts hats bisher immer wunderbar funktioniert
Einstellungen und Berechtigungen
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
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.