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 \v
em [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}
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}
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}