Adicionando texto a rótulos de meta-nós explícitos da tabela

Adicionando texto a rótulos de meta-nós explícitos da tabela

Tenho alguns metadados em uma tabela que estou incluindo como rótulos de barras em meu gráfico. Gostaria de especificar que esses rótulos são tempos, por exemplo, 15,8 segundos. Não sei como fazer com que o texto 'secs' seja anexado aos rótulos.

Aqui está um MWE:

\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\begin{document}
\pgfplotstableread{
  c1 c2  c3 c4 c5 c6 c7    c8  c9  c10  c11 
  1  94  0  5  6  6 15.8  2.0 37.5 42.3 42.3 
  2  93  0  5  7  7 16.1  2.1 30.7 43.1 42.5 
  3  97  0 11 13 13 18.6  1.9 39.0 51.6 51.9 
  4  87 34 93 93 93 34.6 34.6 93.8 93.3 92.4 
}\inittable
\begin{tikzpicture}
  \begin{axis}[
    ybar, bar width=10pt,
    width=6in, height=2.5in,
    ymin=-5, ymax=120, ytick={0,50,100},
    xmin=0, xmax=5, xtick={1,2,3,4},
    point meta=explicit,
    nodes near coords, every node near coord/.append style={
      anchor= west, rotate=90, font=\footnotesize},
    tick label style={font=\footnotesize},
    ]
    \addplot table[x=c1,y=c2,meta=c7] {\inittable};
    \addplot table[x=c1,y=c3,meta=c8] {\inittable};
    \addplot table[x=c1,y=c4,meta=c9] {\inittable};
    \addplot table[x=c1,y=c5,meta=c10] {\inittable};
    \addplot table[x=c1,y=c6,meta=c11] {\inittable};
  \end{axis}
\end{tikzpicture}
\end{document}

Saída MWE

Responder1

O valor padrão de node near coordsé \pgfmathprintnumber\pgfplotspointmeta: ele simplesmente imprime o meta-valor do ponto como um número. Mas isso acontece dentro de um TikNó Z, portanto, você pode simplesmente adicionar texto a ele e ele também irá para o nó. Então, o que você deseja fazer pode ser alcançado com nodes near coords={\pgfmathprintnumber{\pgfplotspointmeta}~secs}. No entanto, se você fizer isso, verá que alguns dos “segundos” se estendem acima da borda superior do eixo, então você também desejará adicionar algo como enlarge y limits={upper, abs value=20}. Essas duas alterações fornecerão a seguinte saída:

insira a descrição da imagem aqui

Porém, pessoalmente, prefiro usar siunitxe o ssímbolo para o segundo, assim:

nodes near coords={%
  ${\pgfmathprintnumber\pgfplotspointmeta} \, \si{\second}$%
}

Observe o xtick distance=1e ytick distance=50que simplifica um pouco seu código. Além disso, uso \pgfplotsset{compat=1.16}para garantir que a saída permanecerá a mesma mesmo em versões futuras do pfgplots.

\documentclass[border=5pt]{standalone}
\usepackage{siunitx}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}

\begin{document}

\pgfplotstableread{
  c1 c2  c3 c4 c5 c6 c7    c8  c9  c10  c11
  1  94  0  5  6  6 15.8  2.0 37.5 42.3 42.3
  2  93  0  5  7  7 16.1  2.1 30.7 43.1 42.5
  3  97  0 11 13 13 18.6  1.9 39.0 51.6 51.9
  4  87 34 93 93 93 34.6 34.6 93.8 93.3 92.4
}\inittable

\begin{tikzpicture}
  \begin{axis}[
    ybar, bar width=10pt,
    width=6in, height=2.5in,
    ymin=-5, ymax=120, ytick distance=50,
    xmin=0, xmax=5, xtick distance=1,
    point meta=explicit,
    enlarge y limits={upper, abs value=5},
    nodes near coords={$\pgfmathprintnumber{\pgfplotspointmeta} \, \si{\second}$},
    every node near coord/.append style={
      anchor=west, rotate=90, font=\footnotesize,
    },
    tick label style={font=\footnotesize},
    ]
    \addplot table[x=c1,y=c2,meta=c7] {\inittable};
    \addplot table[x=c1,y=c3,meta=c8] {\inittable};
    \addplot table[x=c1,y=c4,meta=c9] {\inittable};
    \addplot table[x=c1,y=c5,meta=c10] {\inittable};
    \addplot table[x=c1,y=c6,meta=c11] {\inittable};
  \end{axis}
\end{tikzpicture}

\end{document}

insira a descrição da imagem aqui

informação relacionada