matlab2tikz - LineColor als Variable in .tikz-File schreiben

Tabellen und Grafiken erstellen und anordnen


Trash_84
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: So 17. Sep 2017, 12:03
Wohnort: Berlin

matlab2tikz - LineColor als Variable in .tikz-File schreiben

Beitrag von Trash_84 »

Hallo alle zusammen,

für meine Abschlussarbeit möchte ich Plots die ich in Matlab erstelle mit matlab2tikz in LaTex einbinden. Grundsätlich funktioniert das auch, allerdings würde ich gern die Farben der verschiedenen Plotlinien einer Grafik als Variable in die *.tikz-Datei schreiben (in Matlab) um diese dann später in Latex global anpassen zu können.

Aktuell kann ich nur absolute Farbwerte in die *.tikz-Datei schreiben und müsste diese dann in jeder *.tikz-Datei manuell anpassen bzw. manuell in einen Variablennamen umschreiben, welchen ich dann in LaTex definieren kann.

Ich würde also gern zB. den Befehl \Farbe_U anstelle der absoluten Farbcodes in der erstellten *.tikz-Datei stehen haben...

Aktuell erstellt matlab2tikz folgende *.tikz-Datei (Ausschnitt)
title style     = {font = \Huge},
xlabel style  = {font = {\color{blue}\bfseries}},
ylabel style  = {font = \huge},
legend style = {font = \scshape},ticklabel style = {font = \color{red}}
]
\addplot [color=black!40!red, line width=2.0pt, forget plot]
  table[row sep=crcr]{%
-3.14159265358979   -2.44929359829471e-16\\
-3.1384510609362   -0.0062831956425897\\
-3.13530946828261   -0.0125664532972743\\
-3.13216787562902   -0.0188498349743102\\

Die Farbangabe "color=black!40!red" in \addplot hätte ich jetzt gern wie oben beschrieben, in Form der Variablen "\Farbe_U" angegeben. Diese Variable kann ich dann ebendfalls mit matlab2tikz mit der Option extraColors in der *.tikz-Datei definieren - bzw. eben global in meinem LaTex-Dokument.

Ich hoffe mein Anliegen ist verständlich und noch viel mehr würde ich mich freuen wenn mir vlt sogar jemand helfen könnte! :D

Vielen Dank schonmal, falls ich etwas unklar beschrieben hab - gern nachfragen!

Grüße
Micha

(Diese Frage hatte ich auch schon in goMatlab gepostet, wo mir allerdings nicht weitergeolfen werden konnte)

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

Ich habe kein matlab und kenne mich mit matlab2tikz nicht aus. Wenn ich aber Use \providecolor (xcolor pkg) i.o. \definecolor (<- Link) richtig interpertiere, dann kannst Du eine rgb-Farbe Farbe_U (ohne Backslash) über extraColors definieren und verwenden. Diese Definition von Farbe_U kannst Du in Deiner TeX-Prämble dann mittels \definecolor noch "überschreiben".
Zuletzt geändert von esdd am So 17. Sep 2017, 14:05, insgesamt 1-mal geändert.

Trash_84
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: So 17. Sep 2017, 12:03
Wohnort: Berlin

Beitrag von Trash_84 »

Hey esdd

vielen Dank für deine Antwort - das eigentliche Problem was ich habe ist allerdings nicht die Definition von Farben allgemein, sondern die Möglichkeit den *.tikz-Code gleich mit einer Variablen anstatt einem rgb-Farbcode zu erzeugen, um dann nicht "händisch" die RGB-Farbcodes mit meinen Variablen in der erstellten *.tikz-Datei zu ersetzen. (Welche ich dann mit \definecolor in Tex definieren kann.)

Zugegebener Maßen ist das wohl so eine Mischung aus einem Matlab und einem Tex-Problem... :roll:

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

Du musst doch nur dafür sorgen, dass matlab in Deinen exportierten Code
\addplot[color=Farbe_U,....]{};
schreibt. Wie das geht, weiß ich natürlich nicht. Aber Du schaffst es ja auch color=black!40!red dahin zu bekommen. Wenn ich Deine und die Infos in dem Link richtig verstehe, brauchst Du für den Export dann nur noch einmalig Farbe_U über extraColors als eine beliebige rgb Farbe definieren. Diese sollte dann mit \providecolor{Farbe_U}... in die exportierte TeX-Datei geschrieben.

In Deinem LaTeX-Dokument kannst Du die Farbedefinition dann entweder so lassen, wie sie ist oder definierst vorher einmalig eine Farbe gleichen Namens. Der LaTeX-Befehl \providecolor{Farbe_U} wird nur ausgeführt, wenn noch keine Farbe gleichen Namens definiert ist. Wird also vor dem eingebundenen Code die Farbe bereits anders definiert, sollte die von mathlab exportierte Farbdefinition keine Wirkung mehr haben.
Zuletzt geändert von esdd am So 17. Sep 2017, 14:06, insgesamt 1-mal geändert.

Trash_84
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: So 17. Sep 2017, 12:03
Wohnort: Berlin

Beitrag von Trash_84 »

Ja genau - ich muss irgendwie dafür sorgen das matlab bei color die Variable reinschreibt...

Aber da fehlt mir echt das Know How wie ich das mache... Der Farbcode wird meiner Meinung nach irgendwie aus der in Matlab hinterlegten Farbe über das Skript matlab2tikz generiert. Wie ich da allerdings eine Variable reinbekomme ist mir nicht klar...

davidgrill's
Forum-Anfänger
Forum-Anfänger
Beiträge: 14
Registriert: Sa 22. Dez 2018, 18:55

Beitrag von davidgrill's »

Moin,
der Thread ist zwar schon was älter, aber da er keine Lösung hat, ich aber das selbe Problem hatte und dank ihm eine Lösung gefunden habe, dachte ich, ich geb die Idee mal weiter.

Ich hab die Idee mit \providecolor aufgegriffen und im matlab2tikz.m -File die Zeile 580:
  FORMAT      = ['\\definecolor{%s}{rgb}{' ff ',' ff ',' ff '}%%\n'];
durch
 FORMAT      = ['\\providecolor{%s}{rgb}{' ff ',' ff ',' ff '}%%\n'];
ersetzt.
Die Farben definiere ich dann im Hauptdokument mit \definecolor und dadurch unterliegen die von matlab2tikz nun mit \providecolor geplotteten Farbwerte denen im Hauptdokument.

Das der Plot auch die entsprechende Farbe zugewiesen bekommt lässt sich mit der Funktion
'extraColors' von matlab2tikz lösen.

DrehzahlFarbe = [R G B];
farben = {{'DrehzahlFarbe',drehzahlFarbe}, ...};

plot (Val_1_x, Val_1_y, 'color', DrehzahlFarbe);

matlab2tikz(pfad.tex,'extraColors',farben);
Damit ist für mich das Problem gelöst.
Als Hinweis sei noch gesagt, dass mir aufgefallen ist, dass dies nur klappt, wenn die Farben nicht "normal" sind.
Matlab2tikz scheint die Farben nur mit exportieren zu wollen wenn es sie nicht schon kennt, [1, 0, 0] oder [0.1, 1, 0.1] sind da problematisch.
Was aber geht ist [0.1, 1, 0] (da es keine Linearkombi ist oder so...)

Wenn man darauf achtet ist es aber eig. kein Problem, da man ja im Hauptdokument für die Farben eingeben kann was man will.

Grüße

David

Antworten