\documentclass[tikz]{standalone}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{bm}
\usepackage{tikz-3dplot}

% \usepackage{lmodern}
\usepackage{times}
\usepackage{txfonts}

\usetikzlibrary{arrows}
\usetikzlibrary{intersections}
\usetikzlibrary{math}
\usetikzlibrary{positioning}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{shapes.misc}
\usetikzlibrary{calc}

\begin{document}

\tdplotsetmaincoords{60}{130}
\pgfmathsetmacro{\l}{2}

\begin{tikzpicture}[
    >=latex,
    tdplot_main_coords,
    dot/.style = {
      black, fill = black, circle,
      outer sep = 0, inner sep = 0,
      minimum size = .8mm 
    },
    round/.style = {
      draw = orange, thick, circle,
      minimum size = 1mm,
      inner sep = 0pt, outer sep = 0pt,
    },
    cross/.style = {
      cross out, draw = magenta, thick,
      minimum size = 1mm, 
      inner sep = 0pt, outer sep = 0pt
    },
  ]

  % origin
  \coordinate (O) at (0,0,0);

  % poles
  \coordinate (NP) at (0,0,\l);
  \coordinate (SP) at (0,0,-\l);
  
  % \draw (SP) node[dot, gray] {};
  % \draw (NP) node[dot, gray] {};

  % gray unit circle
  \tdplotdrawarc[gray]{(O)}{\l}{0}{360}{}{};
  \draw[gray, dashed] (-\l, 0, 0) to (\l, 0, 0);
  \draw[gray, dashed] (0, -\l, 0) to (0, \l, 0);

  % axis
  \draw[->] (O) -- ++(1.25*\l,0,0) node[left] {\(\mathbf{\hat{x}}\)};
  \draw[->] (O) -- ++(0,1.25*\l,0) node[right] {\(\mathbf{\hat{y}}\)};
  \draw[->] (O) -- ++(0,0,1.25*\l) node[above] {\(\mathbf{\hat{z}}\)};

  % meridians
  \foreach \phi in {0, 30, 60, ..., 150}{
    \tdplotsetrotatedcoords{\phi}{90}{0};
    \tdplotdrawarc[lightgray, densely dotted, tdplot_rotated_coords]{(O)}{\l}{0}{360}{}{};
  }

  % dot above and its projection
  \pgfmathsetmacro{\phi}{120}
  \pgfmathsetmacro{\theta}{40}

  \pgfmathsetmacro{\px}{cos(\phi)*sin(\theta)*\l}
  \pgfmathsetmacro{\py}{sin(\phi)*sin(\theta)*\l}
  \pgfmathsetmacro{\pz}{cos(\theta)*\l})
  
  % point A
  \coordinate (A) at (\px,\py,\pz);
  \coordinate (Ap) at (\px,\py, 0);
  
  % lines
  \draw[red!80!black, ->] (O) -- (A);
	\draw[red!80!black, densely dashed] (O) -- (Ap) -- (A)
		node[above right] {\(\mathbf{\hat{r}}\)};
  
  % arcs
  \tdplotdrawarc[blue!80!black, ->]{(O)}{.8\l}{0}{\phi}{}{};
  \node[below right, blue!80!black] at (.8\l,0,0) {\(\bm{\hat{\varphi}}\)};
  
  \tdplotsetrotatedcoords{\phi-90}{-90}{0};
  \tdplotdrawarc[blue!80!black, ->, tdplot_rotated_coords]{(O)}{.95\l}{0}{\theta}{}{};
  \node[above right = 1mm, blue!80!black] at (0,0,.8\l) {\(\bm{\hat{\vartheta}}\)};


  % dots
  \draw (O) node[dot] {};
  \draw (A) node[dot, fill = red!80!black] {};

\end{tikzpicture}
\end{document}
% vim:ts=2 sw=2 et:
