Ich möchte dass beim plotte auf der y-Achse bestimmte Anzahl an Werten abgebildet wird. Dabei soll die y-Achse automatisch unterteilt werden. Es dürfen nur gerade Werte wie z.B -10000 -5000 0 5000 ...100 50 usw. vorkommen. Die minimalen und die maximalen yTicks bereiten mir keine Probleme. Ich habe nur mit den Abständen Probleme.
In diesem Fall mit dem delta.
Zitat:
set(gca,'Ytick',[-100000:delta:1000000])
Das "delta" soll so sein, dass auf der y-Achse etwa 5-10 Werte dargestellt werden und diese delta
1 keine Kommazahl und
2 ein "gerader" Wert ist (z.B 100 oder 500 oder 5000 oder 10 usw)
Aus einem anderen Beitrag konnte ich folgendes entnehmen
Hier bekomme ich für delta so gut wie immer eine Kommazahl und keinen gewünschten Wert. Hier bekomme ich zum Beispiel 2389 raus. Ich hätte mir in diesem Fall 1000 gewünscht.
Nein. Es spricht nichts dagegen. Aber wie kann ich 2389 auf 1000 runden? Könnte man auch eine beliebige Zahl runden? Zum Beispiel wenn ich 34 habe, dann soll delta 50 sein. Es soll immer etwas "Gerades" entstehen. wenn ich 3850 bekomme dann soll delta 4000 betragen usw. Folgende delta-Werte sind je nach "unrunden Zahl" erwünscht: 10, 50, 100, 500, 1000, .... So, dass die Zahlen auf der y-Achse ordentlich aussehen.
Wieso bist Du mit dem doch eigentlich sehr guten Tick-Werten von Matlabs
plot
Befehl nicht zufrieden? Da werden doch automatisch 5 bis 10 runde Werte ausgewählt.
"]Ich möchte dass beim plotte auf der y-Achse bestimmte Anzahl an Werten abgebildet wird. Dabei soll die y-Achse automatisch unterteilt werden. Es dürfen nur gerade Werte wie z.B -10000 -5000 0 5000 ...100 50 usw. vorkommen. Die minimalen und die maximalen yTicks bereiten mir keine Probleme. Ich habe nur mit den Abständen Probleme.
Hier bekomme ich für delta so gut wie immer eine Kommazahl und keinen gewünschten Wert. Hier bekomme ich zum Beispiel 2389 raus. Ich hätte mir in diesem Fall 1000 gewünscht.
Wieso 1000? Du wolltest 5 bis 10 Ticks. Mit 1000 sind es aber 110 Werte. Meinst Du 10'000? Dann wären es immer noch 11, statt der 10.
Wenn Du das gewünschte Ziel nur so ungefähr beschreibst, ist es viel schwieriger eine Lösung vorzuschlagen. Denn dann muss man sich nicht nur Gedanken über eine Implementierung in Matlab machen, sondern auch darüber, was Du denn gerne hättest. Bitte erkläre es also nochmal möglichst exakt.
umgehen. Aber wenn ich die yTicks nicht selbst setze, dann bekomme ich auf der y-Achse zwar keine Potenzen mehr, aber die Zahlenreihenfolge ist total durcheinander. Wenn man die y-Achse von unten nach oben anschaut, dann steht dor zum Beispiel. -2000,-1000,0,4000,2000,0. Also total durcheinander das Ganze. Um dieses Problem zu vermeiden, will ich die yTicks selbst setzen. Ich weiß ansonsten nicht wie ich das Problem lösen soll?
der Fehler tritt beim subplot auf. wenn ich das Diagramm einzeln zeichnen, dann ist alles in Ordnung. Woran liegt das? PS: Ich habe die Positionen der Grafen im subplot ein wenig modifiziert. Hat es damit etwas zu tun?. Die pdf. Datei ist im Anhang.
jetzt sehe ich zwar das Ergebnis, aber nicht den Code, der das Ergebnis produziert - und das ist ja das entscheidende.
gca
ist das momentane Koordinatensystem. Wenn man mit subplots arbeitet, ändert sich das momentane Koordinatensystem ständig. Ich würde da also nicht mit gca arbeiten, sondern mit Handles.
Und das Ergebnis hast du ja bereits gesehen. Wie gesagt passen die Zahlen auf der y-Achse im subplot nicht. Nur wenn ich das Diagramm einzeln plotte, dann passt es
Code:
figure('NumberTitle','off','Name','Diagramm F, M') plot(alpha,Mo,'b','LineWidth',1.5) hold plot(alpha,MGas,'m','LineWidth',1.5) plot(alpha,Mges,'g','LineWidth',1.5) hold off
% Intervall der x-Achse festlegen xlim([0,720]) grid
t1=title(['Momente beim' ' ' num2str(z) ' ' 'Zylinder' ' ' name]);
% Schriftgröße des Titels ändern set(t1,'FontSize',14) % Schrittweite auf der x-Achse auf 90° festlegen set(gca,'Xtick',0:90:720) % Schrittweite auf der y-Achse automatisch anpassen
MaxSteps = 10;
Low = -10000;
High = 100000;
Step = (High - Low) / MaxSteps;
RoundStep = 10^(ceil(log10(Step)) - 1); % Oder ROUND set(gca,'Ytick',-100000:RoundStep:1000000) % Zahlenformat der y-Achse ändern von exponentiell zu dezimal
yticks=get(gca,'YTick');
yticks_strings = cellstr(num2str(yticks'));
set(gca,'YTickLabel',yticks_strings );
y1=xlabel('Kurbelwellenwinkel[°]');
% Titel der x-Achse "fett machen" set(y1,'FontWeight','bold')
y2=ylabel('Moment M [Nm]');
% Titel der y-Achse "fett machen" set(y2,'FontWeight','bold') % Titelfarbe auf rot ändern set(t1,'color','r') % Legende setzen legend('Mo [Nm]','Location','NE','MGas [Nm]','Location','NE',...
'Mges [Nm]','Location','NE')
figure('NumberTitle','off','Name','Diagramm F, M') plot(alpha,Mo,'b','LineWidth',1.5) hold plot(alpha,MGas,'m','LineWidth',1.5) plot(alpha,Mges,'g','LineWidth',1.5) hold off
% Intervall der x-Achse festlegen xlim([0,720]) grid
t1=title(['Momente beim' ' ' num2str(z) ' ' 'Zylinder' ' ' name]);
% Schriftgröße des Titels ändern set(t1,'FontSize',14) % Schrittweite auf der x-Achse auf 90° festlegen set(gca,'Xtick',0:90:720) % Zahlenformat der y-Achse ändern von exponentiell zu dezimal
yticks=get(gca,'YTick');
yticks_strings = cellstr(num2str(yticks'));
set(gca,'YTickLabel',yticks_strings );
y1=xlabel('Kurbelwellenwinkel[°]');
% Titel der x-Achse "fett machen" set(y1,'FontWeight','bold')
y2=ylabel('Moment M [Nm]');
% Titel der y-Achse "fett machen" set(y2,'FontWeight','bold') % Titelfarbe auf rot ändern set(t1,'color','r') % Legende setzen legend('Mo [Nm]','Location','NE','MGas [Nm]','Location','NE',...
'Mges [Nm]','Location','NE')
"reproduzierbar" bedeutet grundsätzlich, dass man den Code direkt kopieren und ausführen kann. Dazu fehlen hier jedoch Beispieldaten.
Mit selbst gewählten Beispieldaten kann ich das Problem insofern nachvollziehen, dass sich bei einer Veränderung der Größe der Figure dieser Effekt einstellt. Das kann verhindert werden, indem man
auf der y-Achse sind die Zahlen immer noch in der falschen Reihenfolge. Ich habe dir im Anhand die Dateien KraftMoment_test und EingabeG angehängt. EingabeG wird an die Funktion KraftMoment_test übergeben, dann werden die Diagramme gezeichnet.
hast du denn meinen Vorschlag von 02.08.2015, 21:25 umgesetzt?
Ich würde übrigens dringend überlegen, wie man dieses Projekt sinnvoll strukturieren kann. Es sollte eine übersichtlichere Möglichkeit geben als eine gigantische Funktion mit 2400 Zeilen.
Nochmal eine Erklärung dazu, was "reproduzierbar" bedeutet:
Du hast jetzt zwar die Daten und den Code gepostet. Der Code hat allerdings ein Input-Argument. Da dies aber nicht dokumentiert ist, kann ich kaum erraten, welcher Input-Strukt hier zu sinnvollen Ergebnissen führt.
In einem Forum kann man auch nicht erwarten, dass jemand hunderte Zeilen Code durch liest um die problemantischen Zeilen zu finden. Deshalb ist es immer besser ein Minimal-Beispiel zu posten, welches die Fehler reproduziert. Als Daten sind dann
rand
oder 1:1000 am einfachsten, falls damit der Fehler erzeugt wird.
Ich vermute, dass Haralds Tipp das Problem löst: Wenn die Ticks von Hand gesetzt werden (oder der XTickMode auf 'manual'), sollten die Verschiebungen nicht mehr auftauchen.
Gruß, Jan
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.