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).
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:
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!
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.
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:
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 :
- 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,
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
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...
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');
% Legende plazieren und anpassen
gridLegend(hdlY,3,label,...
'location','southoutside',...% Unter der x-Achse
'Fontsize',10,...% Schriftgröße 10
'Box','off',...% keine Umrandung
'XColor',[111],'YColor',[111]);
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
... 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.
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.