Definierten Farbverlauf hinter Plot legen

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Definierten Farbverlauf hinter Plot legen

von Mr.Goonie » Mo 13. Jul 2015, 08:50

Hallo sudo, vielen Dank für Deine Hilfe.

Ich habe das jetzt so gemacht und es scheint auch zu funktionieren:
\documentclass[a4paper]{report}

\usepackage{xcolor}
\usepackage{pgfplots}
\usepackage{tikz}
\pgfplotsset{compat=1.12}

\begin{document}
	
\begin{figure}[!h]
	\begin{tikzpicture}
	\begin{axis}[width=\textwidth, height=0.5\textwidth,
	xlabel=$\bar{h}_{ab}$,
	ylabel=$T$,
	domain=0:2*pi, samples=100,
	ymin=0,ymax=2,
	xmin=0, xmax=6.3,
	xtick={0,1.5708,3.14159,4.7123889,6.3},
	xticklabels={$0$,$\frac{\pi}{2}$,$\pi$,$\frac{3\pi}{2}$,$2\pi$},
	colorbar horizontal, colormap={color}{rgb255(0cm)=(255,0,180); rgb255(1cm)=(0,255,255); rgb255(3cm)=(100,255,0)}, colorbar style={hide axis}
	]
	
	\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};

	\node [coordinate,pin = {[rotate=0]right:Orange}] at (axis cs:1.39,0.55) { };
	\node [coordinate,pin = {[rotate=0]left:Gelbgr\"un}] at (axis cs:2.5,1.42) { };
	\node [coordinate,pin = {[rotate=0]left:Cyan}] at (axis cs:4.1,1.61) { };
	\node [coordinate,pin = {[rotate=0]left:Violettblau}] at (axis cs:5.1,0.34) { };
	\node [coordinate,pin = {[rotate=0]left:Magenta}] at (axis cs:6,1.47) { };
	
	\end{axis}
	\end{tikzpicture}
	\caption{blblblb}
	\label{plot:t blabla}
\end{figure}

\end{document}
Ist der Code so sauber? Es erscheint jedenfalls keine Fehlermeldung ;)

Falls ja, muss ich nur noch an der richtigen Farbpositionierung tüfteln...

von sudo » Fr 10. Jul 2015, 14:37

Die Fehlermeldung sagt, dass pgfplots im Kompatibilitätsmodus läuft. Wenn du alten Code verwendest brauchst du das evtl. Wenn du \pgfplotsset{compat=1.12} in die Präambel schreibst, kommt die Warnung nicht mehr.
pgfplots wird wie tikz und pgf selbst immer weiterentwickelt. An manchen Stellen stößt man dabei auf Probleme mit altem Code. Andere Pakete werden dann unter neuem Namen veröffentlicht, die dann nicht mehr kompatibel sind. pgfplots löst das Problem mit diesem Kompatibilitätsmodus.

Kriegst du das mit der Colorbar anhand des Beispiels aus dem Manual alleine hin?

von Mr.Goonie » Fr 10. Jul 2015, 11:32

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.

von sudo » Fr 10. Jul 2015, 10:32

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?

von Mr.Goonie » Fr 10. Jul 2015, 09:42

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.

von sudo » Fr 10. Jul 2015, 09:15

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}

von Besserwisser » Fr 10. Jul 2015, 08:54

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

von Mr.Goonie » Fr 10. Jul 2015, 08:13

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)?

von sudo » Do 9. Jul 2015, 14:06

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}

von Mr.Goonie » Do 9. Jul 2015, 13:08

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);

Nach oben