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

Achseskalierung

 

giftmischen
Forum-Anfänger

Forum-Anfänger



Beiträge: 42
Anmeldedatum: 20.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2010, 13:38     Titel: Achseskalierung
  Antworten mit Zitat      
Hallo,
ich würde gerne die Abstände zwischen den Skalierungsschritten auf meiner y-Achse vergrößern.
Leider werde ich aus der Hilfe nicht schlau.
könnt ihr mir helfen?

Danke,
giftmischen
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 28.10.2010, 15:10     Titel: Re: Achseskalierung
  Antworten mit Zitat      
Hallo giftmischen!

Was sind Skalierungsschritte?
Meinst Du die Beschriftung der Y-Achse?
Dann versuch mal dies:
Code:

AxesH = axes;
plot(0:100, 0:100);
set(AxesH, 'YTick', [0:20:100])
 

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
giftmischen
Themenstarter

Forum-Anfänger

Forum-Anfänger



Beiträge: 42
Anmeldedatum: 20.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2010, 16:21     Titel:
  Antworten mit Zitat      
nein, nicht direkt die Beschriftung. Eher die Abstände zwischen den einzelnen Ticks.
Also sprich die Achse in die Länge ziehen, ohne die Anzahl der Ticks zuverändern.
z.B. wenn jetzt rein optisch gesehen zwischen 1 und 2 auf der x-achse 1 cm ist, hätte ich gerne 4 cm.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 28.10.2010, 18:40     Titel:
  Antworten mit Zitat      
Hallo giftmischen,

Ich verstehe Dein Problem immer noch nicht.
Macht mein Prgramm das, was Du möchtest?! Du kannst die Größe des Diagramms selbst wählen und dann die Y-Ticks nach Belieben setzen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
giftmischen
Themenstarter

Forum-Anfänger

Forum-Anfänger



Beiträge: 42
Anmeldedatum: 20.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2010, 23:35     Titel:
  Antworten mit Zitat      
die Größe der Achsen bzw. der Graphik an sich würde ich gerne im quelltext festhalten, damit ich sie auch so speichern kann. Denn wenn ich eine beliebige Größe angebe speichert es so ein komisches quadratisches Normalformat, dass mir nichts nützt.
Vielleicht hab ich mich ein bisschen sehr umständlich ausgedrückt.
Sorry, für das Jan.

Beste Grüße,
giftmischen (Flo)
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 29.10.2010, 01:52     Titel:
  Antworten mit Zitat      
Hallo giftmischen,

ist denn mit "set(AxesH, 'YTick', [0,20,40,80])" Deine Freage beantwortet oder nicht?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
giftmischen
Themenstarter

Forum-Anfänger

Forum-Anfänger



Beiträge: 42
Anmeldedatum: 20.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.10.2010, 09:34     Titel:
  Antworten mit Zitat      
Hallo Jan,
nein, leider nicht.
ich hab mal einen plot hochgeladen, um zu verdeutlichen was ich meine.
die y-achse ist okay so, doch die x-achse sollte am besten über die ganze bildschirmbreite gehen und das macht sie nicht.

ich hab es schon mit

Code:

h=figure;
hold on;
set(h,'units','pixels','position',[60 60 1200 900]);
plot(...
plot(...
.
.
.
legend(
saveas(gcf,
hold off;
 


probiert, aber das klappr nicht.
dein code setzt voraus, dass beide Achsen gleich skaliert sind. Sind sie aber hier nicht.
Verstehst du was ich meine?
Gruß,
giftmischen[/code]

mahal_6_1.png
 Beschreibung:

Download
 Dateiname:  mahal_6_1.png
 Dateigröße:  35.8 KB
 Heruntergeladen:  508 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 29.10.2010, 10:38     Titel:
  Antworten mit Zitat      
Hallo giftmischen,

Aus Deiner ersten Nachricht:
Zitat:
ich würde gerne die Abstände zwischen den Skalierungsschritten auf meiner y-Achse vergrößern.


Aus der jetzigen Nachricht:
Zitat:
die y-achse ist okay so, doch die x-achse sollte am besten über die ganze bildschirmbreite gehen und das macht sie nicht.

Hast Du inzwischen das Problem gewechselt ohne es zu erwähnen?

Dein Code-Beispiel bringt hier nichts, weil es unvollständig ist:
Zitat:
Code:

Bitte poste lauffähigen Code, dann können nachvollziehen, wie Du das gezeigte Bild erstellt hast. Das Bild beschreibt nun aber schon mal den Ist-Zustand. Nun bräuchten wir noch eine nachvollziehbare Erklärung des Soll-Zustandes.

Zitat:
probiert, aber das klappt nicht.

Ganz generell ist "das klappt nicht" in einem Forum nicht hilfreich. Bitte erkläre, was genau nicht so funktioniert, wie Du es Dir wünschst.

Zitat:
dein code setzt voraus, dass beide Achsen gleich skaliert sind.

Nein. Mein Code hat mit der Skalierung nichts zu tun. Er betrifft nur die Werte, bei denen nur auf der Y-Achse die Ticks angezeigt werden. Die X-Achse spielt dabei gar keine Rolle.

Zitat:
Verstehst du was ich meine?

Nein, eigentlich wird es mir immer weniger klar.

Stört Dich die breite Legende? Du kannst sie ja auch innerhalb des AXES-Objekts anzeigen lassen. Siehe "help legend".
Möchtest Du nun die X- oder Y-Achse verändern? Und betrifft Dein Wunsch die graphische Ausdehnung des AXES-Objektes oder den numerischen Inhalt der dargestellten Werte?

Hier mal ein paar Denk-Anstöße:
Code:

ScreenSize = get(0, 'ScreenSize');
FigH = figure('Units', 'pixels', 'Position', [1, 100, ScreenSize(3), 600]);
AxesH = axes('Units', 'normalized', 'Position', [0, 0.1, 1, 0.8], ...
   'Parent', FigH, 'NextPlot', 'add');
PlotH = plot(rand(100, 5));
LegH = legend(PlotH, {'1', '2', '3', '4', '5'}, 1);
 

Vielleicht hilft Dir das weiter.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
giftmischen
Themenstarter

Forum-Anfänger

Forum-Anfänger



Beiträge: 42
Anmeldedatum: 20.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.10.2010, 11:28     Titel:
  Antworten mit Zitat      
Hey Jan,
ja die Aufgabenstellung hat sich von y- auf x-achse verschoben. Ich dachte, das macht keinen Unterschied. Sorry, für die Verwirrung.
Ich hab jetzt hier mal ein möglicherweise laufendes Beispiel gepostet.

Code:


A=randn(5,2);
B=randn(5,2);
C=randn(5,2);

ABC=randn(5,2);

x=[];
for m=1:5;
x{m}=depth.depth(A,ABC,'normalize','on','algorithm','mahal');
end;

y=[];
for m=1:5;
y{m}=depth.depth(B,ABC,'normalize','on','algorithm','mahal');
end;

z=[];
for m=1:5;
z{m}=depth.depth(C,ABC,'normalize','on','algorithm','mahal');
end;

h=figure;
for f=1:5;
   hold on;
      set(h,'units','pixels','position',[60 60 1200 900]);
      plot(x{f},':*','color',[0 0 0],'LineWidth',2);
      plot(y{f},':*','color',[1 0 0],'LineWidth',2);
      plot(z{f},':*','color',[1 1 0],'LineWidth',2);
      legend({'x','y','z'},'Location','EastOutside');
     saveas(gcf,['Desktop','\test',num2str(f),'.bmp']);
    hold off;
  close;
end;
 


Beim mir kam jetzt noch die Fehlermeldung:

??? Error using ==> set
Invalid handle object.

weiß nicht woran das liegt.

Vielen Dank für deine Geduld,
Beste Grüße,
giftmischen

p.s. deinen code konnte ich jetzt leider noch nicht testen. wird aber schnellstmöglich nachgeholt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 29.10.2010, 13:34     Titel:
  Antworten mit Zitat      
Hallo giftmischen,

neben der Fehlermeldung ist auch die Zeile, in der der Fehler auftritt sehr wichtig. Beides ist nötig um den Fehler zu verstehen.

Code:

h=figure;
for f = 1:5;
   hold on;
      set(h,'units','pixels','position',[60 60 1200 900]);
      plot(x{f},':*','color',[0 0 0],'LineWidth',2);
      plot(y{f},':*','color',[1 0 0],'LineWidth',2);
      plot(z{f},':*','color',[1 1 0],'LineWidth',2);
      legend({'x','y','z'},'Location','EastOutside');
     saveas(gcf,['Desktop','\test',num2str(f),'.bmp']);
    hold off;
  close;
end;
 

Du erstellst zunächst eine FIGURE. Danach verwendest Du "set(h, ...)" um die Position zu setzen. Das würde dann aber in jedem Schleifendurchlauf geschehen - einmal reicht!
Am Ende der Schleife löschst Du aber das FIGURE-Objekt wieder mit CLOSE. In der zeiten Iteration der Schleife ist "h" also keine existierende FIGURE mehr und SET scheitert mit der Fehlermeldung.

Zudem folgt auf Dein "hold off" im nächsten Schleifen-durchlauf sofort wieder ein "hold on" - das hebt sich gegenseitig auf.

Verbesserungsvorschlag:
Code:

h = figure('units','pixels','position',[60 60 1200 900]);
AxesH = axes('nextplot', 'add');  % Statt "hold on"
for f = 1:5
  plot(x{f},':*','color',[0 0 0],'LineWidth',2);
  plot(y{f},':*','color',[1 0 0],'LineWidth',2);
  plot(z{f},':*','color',[1 1 0],'LineWidth',2);
  legend({'x','y','z'},'Location','EastOutside');
  drawnow;  % sicherer
  saveas(gcf,['Desktop','\test',num2str(f),'.bmp']);
  delete(get(AxesH, 'children'));  % oder "cla(AxesH, 'reset')"
end;
 

Es ist immer hilfreich wenn beim (Matlab)-Programmieren die Fragenden und die Antwortenden die nötige Geduld aufwenden. Programmieren ist schwierig. Das Lesen der Dokumentation wirklich richtig wichtig, aber es ersetzt nicht das andauernde Propbieren und Probieren und Probieren. Man lernt ja auch nicht Rechnen, wenn man ein Mathebuch durchliest.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
giftmischen
Themenstarter

Forum-Anfänger

Forum-Anfänger



Beiträge: 42
Anmeldedatum: 20.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.11.2010, 13:54     Titel:
  Antworten mit Zitat      
Hey Jan,
danke der Code hat super funktioniert.
Nur kannst du mir vielleicht sagen, warum beim abspeichern das aktuelle aufgerufene Fenster abgespeichert wird? Soll heißen, wenn ich die Funktion duchlaufen lasse und währenddessen im Internet was nachschaue, wird einteil der Webseite als plot gespeichert.

Beste Grüße,
giftmischen
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 04.11.2010, 14:10     Titel:
  Antworten mit Zitat      
Hallo giftmischen,

Zitat:
Soll heißen, wenn ich die Funktion duchlaufen lasse und währenddessen im Internet was nachschaue, wird einteil der Webseite als plot gespeichert.

Gräßlicher Java-Mist.
Benutze Matlab 6.5 um dieses häßliche Problem zu umgehen ;-)

Bitte schreibe dieses Problem auch an den technischen Support, damit sie eine weitere Stimme haben, um sich um dieses Problem zu kümmern.
Ich speichere in Matlab 2009a den Inhalt der Figures mit GETFRAME und IMWRITE -- falsch ich kein PAUSE(0.02) vor GETFRAME eingebe, kann ich durch alle UICONTROLs hindurch auf die darunter liegenden Fenster schauen. Auch sehr witzig.

Gruß, Jan
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.