Столбчатый график/график с узлом, представляющим фактическое значение и процент

Столбчатый график/график с узлом, представляющим фактическое значение и процент

Мне бы хотелось, чтобы узел каждого столбца представлял собой фактическое значение и соответствующий ему процент.

Вот что у меня есть:

\begin{figure}[h]
    \centering
\begin{tikzpicture}
                \tikzstyle{every node}=[font=\scriptsize]
                \begin{axis}[
                axis lines*=left,
                title=myTitle,
                xbar, 
                xmin=0,
                xmax=50,
                width=9cm,
                height=5cm,
                enlarge y limits=0.3,
                xlabel={Number of Stuff},
                symbolic y coords={A, B, C},
                ytick=data,
                nodes near coords,
                point meta={x*100/44},
                nodes near coords={(\pgfmathprintnumber\pgfplotspointmeta\%)},
                nodes near coords align={horizontal},
                y tick label style={font=\scriptsize,text width=1.2cm,align=center}
                ]
                \addplot coordinates{(42,C) (40,B) (32,A)};
                \end{axis}
\end{tikzpicture}
    \caption{A test}
    \label{hist:auth}
\end{figure}

Что дает следующее: mweResult

Поэтому я хотел бы, например, иметь рядом с чертой для A следующий узел: 32 (73%).

Я экспериментировал, nodes near coords={(\pgfmathprintnumber\pgfplotspointmeta\%)}но так и не смог разобраться.

решение1

Необработанные данные хранятся в rawxetc. \tikzstyleи устарели.

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}[every node/.append style={font=\scriptsize}]
  \begin{axis}[visualization depends on=rawx \as \myx,
     axis lines*=left,
     title=myTitle,
     xbar, 
     xmin=0,
     xmax=50,
     width=9cm,
     height=5cm,
     enlarge y limits=0.3,
     xlabel={Number of Stuff},
     symbolic y coords={A, B, C},
     ytick=data,
     nodes near coords,
     point meta={x*100/44},
     nodes near coords={\pgfmathprintnumber\myx~(\pgfmathprintnumber\pgfplotspointmeta\%)},
     nodes near coords align={horizontal},
     y tick label style={font=\scriptsize,text width=1.2cm,align=center}
     ]
     \addplot coordinates{(42,C) (40,B) (32,A)};
  \end{axis}
\end{tikzpicture}
\end{document}

введите описание изображения здесь

решение2

Вот способ использования чистого TikZ

\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}[x=1.5cm]
\pgfkeys{/pgf/number format/.cd,fixed,precision=2}

\foreach \i in {0,1,...,5}{
\pgfmathsetmacro{\num}{int(10*\i)}  
\draw (\i,0) node[below=1mm]{$\num$}--+(90:2mm);
}
% Total 44 participants
\foreach \j/\jtext/\jnum in {1/A/32,2/B/40,3/C/42}{
\draw (0,\j) node[left=5mm]{\jtext}--+(180:2mm);
\pgfmathsetmacro{\jpercent}{\jnum/44*100};       
\draw[blue!50,line width=3mm] (0,\j)--+(0:\jnum/10) 
node[right,blue]{$\jnum \;(\pgfmathprintnumber{\jpercent} \%)$};
}

\draw (0,3.5)--(0,0)--(5,0);
\path
(current bounding box.north) node[above]{My title}
(current bounding box.south) node[below=2mm]{Number of Participants};
\end{tikzpicture}
\end{document}

введите описание изображения здесь

Связанный контент