我目前正在努力改变极坐标中单个点的颜色。我想使用圆柱体为 HSV 颜色空间创建可视化。
谢谢pgfplots 中锥体的 HSV 阴影我了解到您可以使用point meta={symbolic={Hsb=v,u,u}}
直接从当前坐标获取正确的颜色。
但当我把它换成圆柱体时,我得到了很多
Missing number, treated as zero.
<to be read again>
LaTeX
Illegal unit of measure (pt inserted).
<to be read again>
LaTeX
错误。
我当前的代码是:
\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}
我在想,可能是我生成圆柱体的不规范方式导致了问题,但我无法理解。
提前致谢
答案1
我看到您已修复 MWE 以包含mesh/color input = explicit mathparse,
!对于后人而言,HSB“S”还存在饱和度问题,它要求 [0,1] 中的值,而您传递的值\v
在 [0,180] 中。
只是为了好玩,如果你想要一个完整的圆柱体,你可以改变域:
\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}
\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}
答案2
我再次查看了pgfplots 中锥体的 HSV 阴影并发现我忘记添加mesh/color input=explicit mathparse
轴选项了。
工作代码是:
\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}