alterar a cor do ponto nas coordenadas polares tikz

alterar a cor do ponto nas coordenadas polares tikz

atualmente estou lutando para mudar a cor de pontos únicos em coordenadas polares. Quero criar uma visualização para o espaço de cores HSV usando um cilindro.

Graças aSombreamento HSV do cone em pgfplotsAprendi que você pode usar point meta={symbolic={Hsb=v,u,u}}para obter a cor certa diretamente das coordenadas atuais.

Mas quando eu mudo para um cilindro, recebo muitos

Missing number, treated as zero.
<to be read again> 
LaTeX
Illegal unit of measure (pt inserted).
<to be read again> 
LaTeX

erros.

Meu código atual é:

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

Estou pensando que pode ser que minha maneira hackeada de gerar o cilindro esteja causando os problemas, mas não consigo entender isso.

desde já, obrigado

Responder1

Vejo que você corrigiu seu MWE para incluir mesh/color input = explicit mathparse,! Para a posteridade, também houve um problema com o "S" do HSB para saturação que requer um valor em [0,1] para o qual você estava passando \vem [0,180].

Só por diversão, se você quiser um cilindro cheio, você pode alterar o domínio:

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

Um cilindro aberto com coloração HSB E se você quiser um meio cilindro com todo o espectro de cores, basta dobrar o Hue:

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

Um meio cilindro aberto com coloração HSB

Responder2

Olhei novamente para o código deSombreamento HSV do cone em pgfplotse descobri que senti falta de adicionar opções mesh/color input=explicit mathparseàs minhas opções de eixo.

O código de trabalho é:

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

imagem compilada

informação relacionada