Actualmente estoy luchando por cambiar el color de puntos individuales en coordenadas polares. Quiero crear una visualización para el espacio de color HSV usando un cilindro.
Gracias aSombreado HSV de cono en pgfplotsHe aprendido que puedes usarlo point meta={symbolic={Hsb=v,u,u}}
para obtener el color correcto directamente desde las coordenadas actuales.
Pero cuando lo cambio a un cilindro obtengo muchos
Missing number, treated as zero.
<to be read again>
LaTeX
Illegal unit of measure (pt inserted).
<to be read again>
LaTeX
errores.
Mi código actual es:
\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}
Estoy pensando que podría ser que mi forma hacky de generar el cilindro esté causando los problemas, pero no puedo entenderlo.
gracias de antemano
Respuesta1
¡Veo que arreglaste tu MWE para incluirlo mesh/color input = explicit mathparse,
! Para la posteridad, también hubo un problema con el HSB "S" de saturación que requiere un valor en [0,1] al que le estabas pasando \v
[0,180].
Sólo por diversión, si quieres un cilindro completo, puedes cambiar el dominio:
\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}
Y si quieres un medio cilindro con todo el espectro de colores, simplemente duplica el tono:
\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}
Respuesta2
Miré nuevamente el código deSombreado HSV de cono en pgfplotsy descubrí que me faltaba agregar mesh/color input=explicit mathparse
opciones a mi eje.
El código de trabajo es:
\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}