Punktfarbe in Tikz-Polarkoordinaten ändern

Punktfarbe in Tikz-Polarkoordinaten ändern

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 \vin [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}

Ein oben offener Zylinder mit HSB-Färbung 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}

Ein oben offener Halbzylinder mit HSB-Färbung

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 mathparsemeine 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}

kompiliertesBild

verwandte Informationen