Ich kämpfe derzeit damit, die Farbe einzelner Punkte in Polarkoordinaten zu ändern. Ich möchte mithilfe eines Zylinders eine Visualisierung für den HSV-Farbraum erstellen.
Dank anHSV-Schattierung des Kegels in pgfplotsIch habe gelernt, dass Sie verwenden können, point meta={symbolic={Hsb=v,u,u}}
um die richtige Farbe direkt aus den aktuellen Koordinaten zu erhalten.
Aber wenn ich es in einen Zylinder tausche, bekomme ich viele
Missing number, treated as zero.
<to be read again>
LaTeX
Illegal unit of measure (pt inserted).
<to be read again>
LaTeX
Fehler.
Mein aktueller Code ist:
\documentclass[tikz,border=3mm]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{axis}[axis equal, data cs=polar]
\addplot3 [surf,
domain=0:1,
y domain=0:180,
samples=20, %number of samples taken
z buffer=sort,
shader=interp,
variable=\u,
variable y=\v,
point meta={symbolic={Hsb=u,v,v}}] % the origin of my errors
(
{v/2},
{sin(v/2)},
{u}
);
\end{axis}
\end{document}
ich denke, dass die Probleme möglicherweise durch meine behelfsmäßige Methode zum Erzeugen des Zylinders verursacht werden, aber ich komme einfach nicht dahinter.
Dank im Voraus
Antwort1
Ich sehe, Sie haben Ihr MWE so korrigiert, dass es Folgendes enthält mesh/color input = explicit mathparse,
! Für die Nachwelt: Es gab auch ein Problem mit dem HSB „S“ für die Sättigung, das einen Wert in [0,1] erfordert, den Sie \v
in [0,180] übergeben haben.
Nur zum Spaß: Wenn Sie einen vollen Zylinder möchten, können Sie die Domäne ändern:
\documentclass[tikz,border=3mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{axis}[axis equal, data cs=polar]
\addplot3 [
surf,
domain = 0:1,
y domain = 0:360,
samples = 20, %number of samples taken
z buffer = sort,
shader = interp,
variable = \u, variable y = \v,
mesh/color input = explicit mathparse,
point meta={symbolic={Hsb=v,1,u}},
]
({v/2},{sin(v/2)},{u});
\end{axis}
\end{tikzpicture}
\end{document}
Und wenn Sie einen Halbzylinder mit dem vollen Farbspektrum wünschen, verdoppeln Sie einfach den Farbton:
\documentclass[tikz,border=3mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\begin{axis}[axis equal, data cs=polar]
\addplot3 [
surf,
domain = 0:1,
y domain = 0:180,
samples = 20, %number of samples taken
z buffer = sort,
shader = interp,
variable = \u, variable y = \v,
mesh/color input = explicit mathparse,
point meta={symbolic={Hsb=2*v,1,u}},
]
({v/2},{sin(v/2)},{u});
\end{axis}
\end{tikzpicture}
\end{document}
Antwort2
Ich habe mir den Code noch einmal angesehen vonHSV-Schattierung des Kegels in pgfplotsund habe festgestellt, dass ich vergessen habe, mesh/color input=explicit mathparse
meine Achsenoptionen zu ergänzen.
Der funktionierende Code lautet:
\documentclass[tikz,border=3mm]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[axis equal, data cs=polar, mesh/color input=explicit mathparse] % the solution to my problem
\addplot3 [surf,
domain=0:1,
y domain=0:180,
samples=20, %number of samples taken
z buffer=sort,
shader=interp,
variable=\u,
variable y=\v,
point meta={symbolic={Hsb=v,1,u}}]
(
{v/2},
{sin(v/2)},
{u}
);
\end{axis}
\end{tikzpicture}
\end{document}