Seite 1 von 2
Definierten Farbverlauf hinter Plot legen
Verfasst: Do 9. Jul 2015, 10:07
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ß
Verfasst: Do 9. Jul 2015, 12:31
von sudo
Schau mal ins pgfmanual. Kapitel 47, Stichwort color wheel white center.
Verfasst: Do 9. Jul 2015, 13:08
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);
Verfasst: Do 9. Jul 2015, 14:06
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}
Verfasst: Fr 10. Jul 2015, 08:13
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)?
Verfasst: Fr 10. Jul 2015, 08:54
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.
Verfasst: Fr 10. Jul 2015, 09:15
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}
Verfasst: Fr 10. Jul 2015, 09:42
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.
Verfasst: Fr 10. Jul 2015, 10:32
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?
Verfasst: Fr 10. Jul 2015, 11:32
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.