\documentclass[tikz]{standalone}

\usepackage{fontspec}
\usepackage{mathtools}
\usepackage{unicode-math}
\usepackage{siunitx}

\newcommand{\az}{\ensuremath{\Phi}}
\newcommand{\el}{\ensuremath{\theta}}

% Tikz Style
\usepackage{tikz}

\usetikzlibrary{decorations.markings}
\usetikzlibrary{arrows.meta}

\usepackage{pgfplots}
\pgfplotsset{
  compat=1.18
  ,width=15cm
  ,lua debug
}

\definecolor{celestial}{rgb}{1,0,1}%{0.0, 0.51, 0.5}
\definecolor{elevation}{rgb}{0,1,0}%{0.6, 0.4, 0.8}
\definecolor{horizon}{rgb}{0,0,1}%{0.54, 0.81, 0.94}
\definecolor{sun}{rgb}{0.83, 0.0, 0.25}

\tikzstyle{help circle} = [dashed, thick]
\tikzstyle{coordinate curve} = [ultra thick]
\tikzstyle{sun position} = [color=sun,ultra thick]
\tikzstyle{navi direction} = [font=\sffamily\Large]
\tikzstyle{coordinate angle} = [font=\Large]
\tikzstyle{base plane} = [font=\sffamily]

\begin{document}
\begin{tikzpicture}
\begin{axis}[view={5}{5}
  ,axis lines=none,
  ,plot box ratio={1 1 1}
  ,xlabel=$x$
  ,ylabel=$y$
  ,zlabel=$z$
  ,xmin=-1.4
  ,xmax=1.4
%  ,ymin=-1.2
%  ,ymax=1.2
%  ,zmin=-1.2
%  ,zmax=1.2
  ,declare function={
% Sun position
  azimuth=-110;  % Positive = westward from north
  elevation = 65; % Positive = from Horizon to Zenith
  sunx = cos(azimuth)*cos(elevation);
  suny = sin(azimuth)*cos(elevation);
  sunz = sin(elevation);
% Text Az coordinates
  textazx = cos(3/5*azimuth);
  textazy = sin(3/5*azimuth);
  textazz = 0;
% Text El coordinates
  textelx = cos(azimuth)*cos(elevation/2);
  textely = sin(azimuth)*cos(elevation/2);
  textelz = sin(elevation/2);
% Celestial Meridian
    ucx = 1;
    ucy = 0;
    ucz = 0;
%
    vcx = 0;
    vcy = 0;
    vcz = 1;
    celestialx(\t) = cos(\t)*ucx + sin(\t)*vcx;
    celestialy(\t) = cos(\t)*ucy + sin(\t)*vcy;
    celestialz(\t) = cos(\t)*ucz + sin(\t)*vcz;
% Horizon => Azimut
    uhx = 1;
    uhy = 0;
    uhz = 0;
%
    vhx = 0;
    vhy = 1;
    vhz = 0;
    horizonx(\t) = cos(\t)*uhx + sin(\t)*vhx;
    horizony(\t) = cos(\t)*uhy + sin(\t)*vhy;
    horizonz(\t) = cos(\t)*uhz + sin(\t)*vhz;
% Elevation
    uex = cos(azimuth);
    uey = sin(azimuth);
    uez = 0;
%
    vex = 0;
    vey = 0;
    vez = 1;
    elevationx(\t) = cos(\t)*uex + sin(\t)*vex;
    elevationy(\t) = cos(\t)*uey + sin(\t)*vey;
    elevationz(\t) = cos(\t)*uez + sin(\t)*vez;
  }
]
%
\draw[->] (0,0,0) -- (1.1,0,0) node[anchor=west,navi direction]   {North};
\draw[->] (0,0,0) -- (0,-1.5,0) node[anchor=north,navi direction] {East};
\draw[->] (0,0,0) -- (0,0,1.1) node[anchor=south,navi direction]  {Zenith};
\node at ( 0.71,    0,0.71)[anchor=west,outer sep=1ex,base plane] {Meridian}; %0.71 app sqrt(2)/2
\node at (-0.71, 0.71,0)   [anchor=south,base plane]              {Horizon};
% Plot the Meridian through Nord
\addplot3 [
  domain=0:360,
  samples=60,
  samples y=1,
  variable=t,
  celestial,help circle
] (
 {celestialx(t)},
 {celestialy(t)},
 {celestialz(t)}
);
% Plot the horizon circle
\addplot3 [
  domain=0:360,
  samples=60,
  samples y=1,
  variable=t,
  horizon,help circle
] (
 {horizonx(t)},
 {horizony(t)},
 {horizonz(t)}
);
% Plot the azimuth curve
\addplot3 [
  domain=0:azimuth+0.5,
  samples=60,
  samples y=1,
  variable=t,
  horizon,coordinate curve,
  postaction={decorate},
  decoration={markings,
    mark=at position 0.55 with {\arrow{Latex[round]}}
  }
] (
 {horizonx(t)},
 {horizony(t)},
 {horizonz(t)}
);
% Plot the great circle through the sun
\addplot3 [
  domain=0:360,
  samples=60,
  samples y=1,
  variable=t,
  elevation,help circle
] (
 {elevationx(t)},
 {elevationy(t)},
 {elevationz(t)}
);
% Plot the elevation curve
\addplot3 [
  domain=0.5:elevation,
  samples=60,
  samples y=1,
  variable=t,
  elevation,coordinate curve,
  postaction={decorate},
  decoration={markings,
    mark=at position 0.5 with {\arrow{Latex[round]}}
  }
] (
 {elevationx(t)},
 {elevationy(t)},
 {elevationz(t)}
) ;
\draw [-{Latex[round]}, sun position] (0,0,0) -- (sunx, suny, sunz) node[anchor=south east,inner sep=0] {$\odot$};
\draw [sun position, thin](0,0,0) -- (uex, uey, 0);
\node at (textazx, textazy, textazz) [anchor=north,coordinate angle] {\az};
\node at (textelx, textely, textelz) [anchor=east ,coordinate angle] {\el};
\end{axis}
\end{tikzpicture}

\end{document}


