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

Grafik mit Splines aus Matrizen

 

Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.01.2013, 14:33     Titel:
  Antworten mit Zitat      
Hallo,

ich würde wie in der Doku beide Linien in einer Matrix zusammenfassen und das an AREA übergeben.

Schau dir mal das Beispiel an in
Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen


rowJoe
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 25.11.12
Wohnort: ---
Version: 2015b
     Beitrag Verfasst am: 03.01.2013, 16:27     Titel:
  Antworten mit Zitat      
Hey Harald,

die Beispiele hatte ich mir bereits angesehen und hatte den Eindruck damit nicht so recht weiterzukommen.

Ich hatte mir eine Matrix konstruiert, welche in der ersten Spalte die Koordinaten der y-Achse, in Spalte 2 die x-Koordinaten für die linke und in der 3. Spalte die x-Koordinaten für die rechte Linie enthält. Das Ergebnis habe ich dir unten angehängt.

Die x- und y-Werte in jeweils eine Variable zu laden und diese dann an die area-Funktion zu übergeben hatte ich auch bereits versucht. Ausgegeben wurde die Fehlermeldung, dass die Variablen nicht die gleiche Größe haben (x-Werte haben 2 Spalten, y-Werte haben nur eine).

Area-Versuch_eine_Matrix.jpg
 Beschreibung:

Download
 Dateiname:  Area-Versuch_eine_Matrix.jpg
 Dateigröße:  20.07 KB
 Heruntergeladen:  623 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.01.2013, 17:00     Titel:
  Antworten mit Zitat      
Hallo,

bei area ist das Problem wohl, dass sich x- und y-Werte nicht so einfach vertauschen lassen.
Zitat:
Ausgegeben wurde die Fehlermeldung, dass die Variablen nicht die gleiche Größe haben (x-Werte haben 2 Spalten, y-Werte haben nur eine).

Man könnte die x-Werte zweimal nebeneinandersetzen. Dann gibt es zwar keine Fehlermeldung, aber leider auch nicht das, was wir wollen.

Ein erster Block in area sagt mir, dass area letztlich mit Patches arbeitet.

Einfacher sollte es mit fill sein.
Siehe auch hier
http://www.mathworks.com/matlabcent.....e-area-between-two-curves
Der Code sollte zumindest Ideen liefern, wie man hier mit fill arbeiten kann.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
rowJoe
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 25.11.12
Wohnort: ---
Version: 2015b
     Beitrag Verfasst am: 07.01.2013, 14:35     Titel:
  Antworten mit Zitat      
Moin Harald,

kaum zu glauben, aber es hat funktioniert. Ich hab ein wenig herumprobiert und das Problem wie folgt gelöst:

- x-/y-Werte beider Linien (linke und rechte) in jeweils einer Matrix zusammenführen
- Matrix der rechten Linie horizontal spiegeln (mit fliplr())
- beide Matrizen zusammenführen
- x-/y-Werte der Matrizen an fill() übergeben


Nun habe ich die Abbildung wie im Anhang gezeigt und mich auch gleich an den grafischen Details versucht - teilweise leider auch ohne großen Erfolg.

Im Handbuch habe ich schon nachgesehen, allerdings finde ich zu meinen "Wünschen" nicht die richtige Funktion bzw. komme mit den gefundenen nicht zurecht.

Hilfslinien: schwarz, Volllinie, das Gitter soll immer quadratisch sein, im Vordergrund

edit: Bei der area() Funktion habe ich diesen Code-Schnippsel entdeckt, welcher die Hilfslinie in den Vordergrund schiebt:
Code:
set(gca,'Layer','top')


ausgefüllte rosa Fläche: keine schwarze Linie (wenn es nicht ohne geht, rot)

Mittelwert mit Standardabweichung:
Gibt es hier eine Möglichkeit, wie auch bei den anderen Linien mittels pchip die Linie zu interpolieren und dann an den Datenpunkten die Standardabweichung darzustellen? Ich hatte hier versucht die Linie, welche die Messpunkte verbindet, von herrorbar (aus den Matlabfiles) herauszunehmen und damit nur die Standardabweichung darzustellen - leider funktionierte das so nicht...
Wie bekomme ich, wenn es nicht anders geht, die die Datenpunkte verbindende Linie schwarz und die Standardabweichung grau?

Nun zum letzten Punkt: Die Legende sitzt nun in Position NortWest. Für meine Arbeit ist das jedoch sehr platzraubend. In der Doku habe ich gesehen, dass die Möglichkeit besteht die Legende "bestpassend" zu plazieren. Habe ich ausprobiert, sieht auch recht gut aus... Allerdings werden dann dabei einige Datenpunkte durch die Legende verdeckt. Das sollte eigentlich nicht passieren...

Sorry für die vielen Fragen! Leider komme ich allein' nicht weiter - ich hoffe ihr könnt mir nochmal helfen...


Bereits vielen Dnak für eure großartige Hilfe. Wenn ihr den Quellcode benötigt, stelle ich ihn gerne zur Verfügung!

Jonas

Beispiel.jpg
 Beschreibung:
Beispieldatei

Download
 Dateiname:  Beispiel.jpg
 Dateigröße:  35.16 KB
 Heruntergeladen:  652 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.01.2013, 23:57     Titel:
  Antworten mit Zitat      
Hallo,

ich werde aus den Fragen teils nicht so ganz schlau.

Hilfslinien hat sich beantwortet?
Zitat:
ausgefüllte rosa Fläche: keine schwarze Linie (wenn es nicht ohne geht, rot)

Wie erstellst du die Fläche denn? mit fill? Dann kannst du die Eigenschaft EdgeColor passend setzen.
Zitat:

Gibt es hier eine Möglichkeit, wie auch bei den anderen Linien mittels pchip die Linie zu interpolieren und dann an den Datenpunkten die Standardabweichung darzustellen?

Interpolieren kann man alles. Was passiert, wenn du das wie vorher machst? Die Standardabweichung von was?
Zitat:
leider funktionierte das so nicht...

Was heißt das? Fehlermeldung? unerwünschtes Ergebnis?
Zitat:

Wie bekomme ich, wenn es nicht anders geht, die die Datenpunkte verbindende Linie schwarz und die Standardabweichung grau?

Handles der erzeugten Objekte zurückgeben lassen und die passende Eigenschaft setzen. Genauer kann ich das nicht sagen, da ich nicht weiß, wie du die Dinge erzeugt hast.

Zitat:
Die Legende sitzt nun in Position NortWest [...]

Du kannst die Standard-Locations durchprobieren. Wenn dir die nicht gefallen, kannst du das mit Position selbst beliebig setzen. Oder in Plot Tools mit der Maus dahin ziehen, wo es hin soll.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
rowJoe
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 25.11.12
Wohnort: ---
Version: 2015b
     Beitrag Verfasst am: 09.01.2013, 11:27     Titel:
  Antworten mit Zitat      
So... ich habe jetzt ein wenig herumprobiert - deine Denkanstöße haben mir recht gut geholfen. Das Zwischenergebnis habe ich wieder beigelegt.

Im Vergleich zu meinem vorigen Beitrag habe mich im Lauf des gestrigen Tages (und der Nacht) habe ich einige Probleme lösen können und einige sind bei der Umstellung von JPG auf EPS aufgetreten.

In meinen bisherigen Grafikausgaben habe ich mit saveas() die Grafiken als *.jpg speichern lassen, damit ich dir Grafiken für euch einfacher hochladen kann. Da die Qualität jedoch deutlich schlechter ist als bei *.eps Dateien und diese zudem Vektorgrafiken sind, möchte ich diese nutzen. In dem Beispiel unten seht ihr, dass die Darstellungen beider Dateien deutliche Unterschiede aufzeigen (seht euch bitte die beiden beiliegenden Grafiken an):

- die Linien sind alle schwarz in den EPS-Dateien. Die Farbgebung scheint im Vergleich zu den JPG-Dateien nicht übernommen zu werden. Was kann ich tun, damit es farblich wie in der JPG-Datei aussieht?
- ich möchte die Grafikausgabe gerne im DIN-A5 Hochformat (148x210mm) , dies habe ich mit folgendem Code versucht zu erreichen:
Code:
set(Fig,'Units','centimeters','Position',[2 2 16.8 23.0]);

Bei der EPS-Datei sieht dies ebenfalls anders aus, als bei der JPG-Datei. Was kann ich hier tun?


Allgemein, also unabhängig von der Wahl des Speicherformates habe ich noch die beiden folgende Problemchen Rolling Eyes :
- Ganz ganz wichtig: Das Hilfslinienraster muss (!) quadratisch sein. Da das Format der Grafik fix ist (siehe oben: Hochdormat DIN-A5), habe ich absolut keine Ahnung wie man das lösen kann.
- Die Position der Legende: Da ich die Grafiken (ca. 620) mit einer Schleife aus einer Matrix auslese bzw. erstellen lasse, ist es (denke ich) keine Option die Legende auf der Grafik manuell auszurichten. Gibt es hier nicht irgendeine elegante Möglichkeit wie man die Grafik in das Diagramm integrieren kann, so dass die Diagramminhalte nicht verdeckt werden?

Ich hoffe ich habe mich diesmal ein wenig verständlicher ausgedrückt. Gebt mir bitte eine kurze Info, wenn ihr den Quellcode mit der Grafikerstellung benötigt. Dann kommentiere ich diesen ausführlich und stelle ihn euch zur Verfügung.


Vielen vielen Dank für eure Hilfe und die bereits investierte Zeit,

Jonas


edit: Ich hatte die Grafiken vergessen

Grafikausgabe_fig-Datei.fig
 Beschreibung:
Grafik manuell als *.fig abgespeichert

Download
 Dateiname:  Grafikausgabe_fig-Datei.fig
 Dateigröße:  440.3 KB
 Heruntergeladen:  355 mal
Grafikausgabe_fig-Datei.jpg
 Beschreibung:
Grafik mit saveas() als *.jpg abgespeichert

Download
 Dateiname:  Grafikausgabe_fig-Datei.jpg
 Dateigröße:  39 KB
 Heruntergeladen:  626 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.01.2013, 21:31     Titel:
  Antworten mit Zitat      
Hallo,

da kann ich nur Google und File Exchange empfehlen.

Ein erster Startpunkt:
http://www.mathworks.com/matlabcent.....eexchange/23629-exportfig

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
rowJoe
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 25.11.12
Wohnort: ---
Version: 2015b
     Beitrag Verfasst am: 09.01.2013, 23:32     Titel:
  Antworten mit Zitat      
Moin Harald,

das Paket habe ich vorhin schon kurz angesehen und auch "matlab2tikz", habe es dann aber doch wieder verworfen und mit der saveas Funktion herum experimentiert. Ich hatte ein paar Seiten im Netz gefunden (www.gidf.de), auf denen die Grafiken mit saveas abgespeichert wurden... Ich denke mal, dass ich die Punkte mit der Grafikausgabe als eps in der heutigen Nachtschicht hinbekomme... Danke die Harald Smile

Zu der Problematik mit dem Hilfslinienraster habe ich jedoch noch nichts wirklich gefunden... Ich glaube, dass eine Möglichkeit die Skalierung der x-Achse wäre. Allerdings müsste die Skalierung für jede Grafik neu gewählt werden... Geht das evtl. noch irgendwie einfacher? Vielleicht sogar eine Funktion? Die habe ich dann bisher noch nicht gefunden... :/

Bei der Positionierung der Legende sieht es leider ähnlich aus... Bei Google und auf der Matlab Files Page hatte ich geschaut, aber leider nichts gefunden...
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.01.2013, 23:49     Titel:
  Antworten mit Zitat      
Hallo,

was die Grafik an sich angeht, hilft
Code:

Ich weiß jedoch nicht, inwieweit das beim Speichern erhalten bleibt.

Was die Legende angeht, würde ich im Zweifelsfall eine '...Outside' - Location verwenden. Ist aber natürlich Geschmackssache.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
rowJoe
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 25.11.12
Wohnort: ---
Version: 2015b
     Beitrag Verfasst am: 14.01.2013, 18:19     Titel:
  Antworten mit Zitat      
Hallo zusammen,

ich habe nun einige Tage gebastelt und bin bezüglich der Hilfslinien noch nicht weitergekommen - bin aber dran und poste dann meine Lösung gerne hier!

Bezüglich der Legende habe ich nun die Funktion gridLegend für mich entdeckt. Mein Minimalbeispiel klappt wunderbar (siehe Code unten). Allerdings funktioniert die Implimentierung in meinen Code überhaupt nicht. Ich übergebe als Handle für "hdlY" einen 5x1 Vektor mit den Handles der eingefügten Plots. FigKanalhoehe ist dabei die FUnktion in die ich die Legende implimentieren möchte. Er meckert nun, dass irgendwas nicht passt, allerdings hat das ganze ja zuvor auch geklappt und die Anzahl der Handles bzw. Größe des Arrays stimmt auch...

Was kann ich tun? Bin einwenig am Verzweifeln...


Als Fehlermeldung erhalte ich folgende:
Index exceeds matrix dimensions.

Error in gridLegend (line 208)
set(object_h(linenum+1), 'ydata', height-position*sheight);

Error in FigKanalhoehe (line 119)
gridLegend(legEintrag,5,label,'location','southoutside','Orientation','Horizontal');



Code:
% Daten generieren und plotten
y=[0:0.6:3.0]'*sin(-pi:0.1:pi);
hdlY=plot(y');


% Beschriftung der Legende
label{1} = 'Gemittelte Neuteile';
label{2} = 'Fertigungsstreuung';
label{3} = 'Mittelwert';
label{4} = 'Minimum';
label{5} = 'Maximum';


% Legende plazieren und anpassen
gridLegend(hdlY,3,label,...
    'location','southoutside',...           % Unter der x-Achse
    'Fontsize',10,...                       % Schriftgröße 10
    'Box','off',...                         % keine Umrandung
    'XColor',[1 1 1],'YColor',[1 1 1]);    
 
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 14.01.2013, 18:34     Titel:
  Antworten mit Zitat      
Hallo

Die Anzahl der Beschriftungen muss der Anzahl der Kurven übereinstimmen.
Im Klartext du hast 6 Kurven übergibst aber 5 Legend-Namen und bitte für externe Funktionen Link eingeben
Private Nachricht senden Benutzer-Profile anzeigen
 
rowJoe
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 25.11.12
Wohnort: ---
Version: 2015b
     Beitrag Verfasst am: 15.01.2013, 10:32     Titel:
  Antworten mit Zitat      
denny hat Folgendes geschrieben:
... Die Anzahl der Beschriftungen muss der Anzahl der Kurven übereinstimmen.

Hatte ich auch erst gedacht, aber daran lag es nicht. Bei dieser FUnktion müssen die Summe der Kurven nicht mit denen der Beschriftungen übereinstimmen - sie werden einfach weggelassen.

denny hat Folgendes geschrieben:

...bitte für externe Funktionen Link eingeben

Sorry, den hatte ich vergessen. Hier der Link zu GridLegend aus der Mathworks Community.

Ich habe jedoch den Fehler gefunden. Mit der Funktion ist es NICHT möglich flächenfüllende Elemente zu beschriften. Man kann nur Elemente der plot()-Funktion beschriften. Das hatte ich nicht beachtet. Mit einem kleinen Trick klappt es jedoch trotzdem:

Ich habe in den Hintergrund (hinter die bereits gefüllte Fläche) eine Linie in der gleichen Farbe wie die beschriftete Fläche gelegt. Diese mit der Breite '10' und der Legendeneintrag sieht aus wie der der Standardlegende für flächenfüllende Bereiche.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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.