Definierten Farbverlauf hinter Plot legen

Tabellen und Grafiken erstellen und anordnen


Mr.Goonie
Forum-Anfänger
Forum-Anfänger
Beiträge: 15
Registriert: Mo 6. Jul 2015, 08:09

Definierten Farbverlauf hinter Plot legen

Beitrag von Mr.Goonie »

Hallo zusammen,

ich habe in einem Plot eine Funktion ausgegeben. Da die Funktion eine Abhängigkeit zu einem Farbort beschreibt, würde ich gerne in den Hintergrund einen Verlauf legen. Einem Bogenmaß soll dabei jeweils ein RGB-Wert zugewiesen werden, siehe anhängendes Bild.

Gibt es da eine elegante Lösung? Oder kann man evtl. einen Verlauf in Photoshop erstellen und als Bild hinter die Funktion legen?
\documentclass[a4paper]{report}
\usepackage{xcolor}
\usepackage{pgfplots}

\begin{document}
	\begin{figure}[!h]
		\begin{tikzpicture}
		\begin{axis}[
		xlabel=$\bar{h}_{ab}$,
		ylabel=$T$,
		domain=0:2*pi, samples=100,
		ymin=0,ymax=2,
		xtick={0,1.5708,3.14159,4.7123889,6.3},
		xticklabels={$0$,$\frac{\pi}{2}$,$\pi$,$\frac{3\pi}{2}$,$2\pi$}
		]
		
		\addplot [mark=none]{1-0.17*cos(deg(x)-30)+0.24*cos(2*deg(x))+0.32*cos(3*deg(x)+6)-0.2*cos(4*deg(x)-63};
		
		\end{axis}
		\end{tikzpicture}
		\caption{blabla}
		\label{plot:t blabla}
	\end{figure}
\end{document}
Vielen Dank vorab und Gruß
Dateianhänge
Farbkreis.jpg
Farbkreis.jpg (116.41 KiB) 2833 mal betrachtet

sudo
Forum-Guru
Forum-Guru
Beiträge: 459
Registriert: Mi 3. Okt 2012, 11:32

Beitrag von sudo »

Schau mal ins pgfmanual. Kapitel 47, Stichwort color wheel white center.
Ein vollständiges Minimalbeispiel (VM) zu erzeugen, ist gar nicht schwer und hilft ganz oft, Fehler selber zu finden. Ohne bekommt man selten gute Antworten. Anleitungen findest du z.B. im golatex Wiki auf TeXWelt oder minimalbeipiel.de
Außerdem hilft das Lesen dieser Seite, Fragen richtig zu stellen.

Mr.Goonie
Forum-Anfänger
Forum-Anfänger
Beiträge: 15
Registriert: Mo 6. Jul 2015, 08:09

Beitrag von Mr.Goonie »

Hi,

den Befehl
\pgfplotsset{
colormap={bluered}{
rgb255(0cm)=(0,0,180); rgb255(1cm)=(0,255,255); rgb255(3cm)=(100,255,0);
rgb255(1cm)=(255,255,0); rgb255(1cm)=(255,0,0); rgb255(1cm)=(128,0,0)}
}
habe ich gefunden. Ich weiß allerdings nicht, wie ich das einbetten soll. Die Farben sollen nicht als Kreis, sondern als horizontaler "Regenbogen" dargestellt werden.

Muss ich daher ein neues \fill erstellen und dann mit dem Verlauf "bluered" füllen?

Also:
\fill [color map=bluered, fill opacity=0.1] (axis cs:0,0) rectangle (axis cs:6.3,2);

sudo
Forum-Guru
Forum-Guru
Beiträge: 459
Registriert: Mi 3. Okt 2012, 11:32

Beitrag von sudo »

Ich habe folgende Lösung von TeX.sx. Leider konnte ich unter Overleaf die colormap=bluered nicht verwenden.
\documentclass[a4paper]{report}
\usepackage{xcolor}
\usepackage{pgfplots}
\usetikzlibrary{shadings}
\def\defcolormapshading#1#2{%
 \pgfplotscolormaptoshadingspec{#2}{50pt}\tempa%
 \def\tempb{\pgfdeclarehorizontalshading{#1}{\paperheight}}%
 \expandafter\tempb\expandafter{\tempa}%
 \let\tempa\undefined\let\tempb\undefined%
}%

\begin{document}
   \begin{figure}[!h]
	  \defcolormapshading{lightshading}{hot}
      \begin{tikzpicture}
      \begin{axis}[
      xlabel=$\bar{h}_{ab}$,
      ylabel=$T$,
      domain=0:2*pi, samples=100,
      ymin=0,ymax=2,
      xtick={0,1.5708,3.14159,4.7123889,6.3},
      xticklabels={$0$,$\frac{\pi}{2}$,$\pi$,$\frac{3\pi}{2}$,$2\pi$},
      axis background/.style={shading=lightshading,fill opacity=0.5}
      ] 
      \addplot [mark=none]{1-0.17*cos(deg(x)-30)+0.24*cos(2*deg(x))+0.32*cos(3*deg(x)+6)-0.2*cos(4*deg(x)-63};
      \end{axis}
      \end{tikzpicture}
      \caption{blabla}
      \label{plot:t blabla}
   \end{figure}
\end{document}
Ein vollständiges Minimalbeispiel (VM) zu erzeugen, ist gar nicht schwer und hilft ganz oft, Fehler selber zu finden. Ohne bekommt man selten gute Antworten. Anleitungen findest du z.B. im golatex Wiki auf TeXWelt oder minimalbeipiel.de
Außerdem hilft das Lesen dieser Seite, Fragen richtig zu stellen.

Mr.Goonie
Forum-Anfänger
Forum-Anfänger
Beiträge: 15
Registriert: Mo 6. Jul 2015, 08:09

Beitrag von Mr.Goonie »

Vielen Dank schon Mal für die Antwort. Ich möchte allerdings die Farben sowie die Position und Breite der jeweiligen Farbe, bezogen auf die x-Achse, selbst bestimmen.

Geht das daher über \fill und einen selbst definierten Farbverlauf (siehe mein vorheriger Eintrag)?

Besserwisser

Beitrag von Besserwisser »

Falscher Status! Rückfrage ist für Helfer, nicht für Hilfesuchende. Für Fragesteller gibt es offen, komplex und am Ende beantwortet.

sudo
Forum-Guru
Forum-Guru
Beiträge: 459
Registriert: Mi 3. Okt 2012, 11:32

Beitrag von sudo »

Ja du kannst auch selbst eine colormap definieren, wenn du den Code denn richtig kopierst.
Beachte, dass bei der Definition einer colormap nur ganzzahlige cm-Werte funktionieren. Du kannst die Positionen der Farben aber durch die Anzahl der Werte bestimmen. Du darfst natürlich auch jede Position nur einmal mit einer Farbe belegen.
\documentclass[a4paper]{report}
\usepackage{xcolor}
\usepackage{pgfplots}
\pgfplotsset{ 
	colormap={bluered2}{ 
	rgb255(0cm)=(0,0,180); rgb255(1cm)=(0,255,255); rgb255(3cm)=(100,255,0); 
	rgb255(4cm)=(255,255,0); rgb255(5cm)=(255,0,0); rgb255(6cm)=(128,0,0); 
	rgb255(7cm)=(255,255,0); rgb255(8cm)=(255,0,0); rgb255(9cm)=(128,0,0)} 
} 
\def\defcolormapshading#1#2{%
 \pgfplotscolormaptoshadingspec{#2}{50pt}\tempa%
 \def\tempb{\pgfdeclarehorizontalshading{#1}{\paperheight}}%
 \expandafter\tempb\expandafter{\tempa}%
 \let\tempa\undefined\let\tempb\undefined%
}%

\begin{document}
   \begin{figure}[!h]
     \defcolormapshading{lightshading}{bluered2}
      \begin{tikzpicture}
      \begin{axis}[
      xlabel=$\bar{h}_{ab}$,
      ylabel=$T$,
      domain=0:2*pi, samples=100,
      ymin=0,ymax=2,
      xtick={0,1.5708,3.14159,4.7123889,6.3},
      xticklabels={$0$,$\frac{\pi}{2}$,$\pi$,$\frac{3\pi}{2}$,$2\pi$},
      axis background/.style={shading=lightshading,fill opacity=0.5}
      ] 
      \addplot [mark=none]{1-0.17*cos(deg(x)-30)+0.24*cos(2*deg(x))+0.32*cos(3*deg(x)+6)-0.2*cos(4*deg(x)-63};
      \end{axis}
      \end{tikzpicture}
      \caption{blabla}
      \label{plot:t blabla}
   \end{figure}
\end{document}
Ein vollständiges Minimalbeispiel (VM) zu erzeugen, ist gar nicht schwer und hilft ganz oft, Fehler selber zu finden. Ohne bekommt man selten gute Antworten. Anleitungen findest du z.B. im golatex Wiki auf TeXWelt oder minimalbeipiel.de
Außerdem hilft das Lesen dieser Seite, Fragen richtig zu stellen.

Mr.Goonie
Forum-Anfänger
Forum-Anfänger
Beiträge: 15
Registriert: Mo 6. Jul 2015, 08:09

Beitrag von Mr.Goonie »

ah, das sieht doch schon sehr gut aus.

Kann ich den Verlauf bluered2 denn auch in mit \fill laden?
Dann könnte ich nämlich die Höhe des Verlaufs auf z.B. die Hälfte beschränken.
\fill [bluered2?!?!, fill opacity=0.1] (axis cs:0,0) rectangle (axis cs:6.3,1);
brauche ich für \pgfplotscolormaptoshadingspec ein zusätzliches Paket? Der Befehl wird zwar ausgeführt aber nicht erkannt.

sudo
Forum-Guru
Forum-Guru
Beiträge: 459
Registriert: Mi 3. Okt 2012, 11:32

Beitrag von sudo »

Nein du kannst nicht so einfach \fill benutzen.
Willst du vielleicht eine colorbar wie im pgfplotsmanual Kapitel 4.9.12?
\begin{tikzpicture}
\begin{axis}[colorbar horizontal]
\addplot[mesh,ultra thick] {x};
\end{axis}
\end{tikzpicture}
Bzgl. \pgfplotscolormaptoshadingspec: Kannst du bitte die Fehlermeldungen posten?
Ein vollständiges Minimalbeispiel (VM) zu erzeugen, ist gar nicht schwer und hilft ganz oft, Fehler selber zu finden. Ohne bekommt man selten gute Antworten. Anleitungen findest du z.B. im golatex Wiki auf TeXWelt oder minimalbeipiel.de
Außerdem hilft das Lesen dieser Seite, Fragen richtig zu stellen.

Mr.Goonie
Forum-Anfänger
Forum-Anfänger
Beiträge: 15
Registriert: Mo 6. Jul 2015, 08:09

Beitrag von Mr.Goonie »

Hi, eine Colorbar ginge auch :)

Hier der Logeintrag:

running in backwards compatibility mode (unsuitable tick labels; missing features). Consider writing \pgfplotsset{compat=1.12} into your preamble.

Antworten