[TIKZ/PGFPLOTS] cambiare font in node in loop

  • Creatore
    Topic
  • #109489
    Up
    0
    Down
    ::


    Ciao a tutti!
    Torno a chiedere il vostro aiuto dopo un bel po’!

    Vorrei creare un barplot. Le bars sono in gruppi di due, ed in cima ad ogni coppia devo scrivere qualcosa.

    Tutte le info. sono prese da una pgfplotstable, quindi per scrivere le etichette in cima alle bars uso un ‘foreach’. Per posizionarle correttamente uso la keyword ‘axis cs’. Ho usato una combinazione di \edef \temp e \noexpand, dato che (stando ai risultati della mia ricerca) axis cs ha dei problemi quando viene usato dentro un loop.

    Fin qui il tutto funziona, ma ora vorrei cambiare il font (anche solo la sua dimensione) di cio’ che scrivo sopra le barre, e con i normali \small, etc. non riesco a farlo. Credo sia dovuto al fatto che se uso \small dove vi e’ il trucco menzionato sopra per far funzionare axis cs l’espansione di small crea danni.

    Ecco un esempio minimo compilabile, grazie per ogni eventuale aiuto!

    P.S. Ho editato il post solo per dei typos con la formattazione del codice.

    `
    \documentclass[tikz]{standalone}
    \usepackage[utf8]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage{pgfplotstable}
    \usepackage{pgfplots}
    \pgfplotsset{compat=newest}

    \begin{document}

    \pgfplotstableread[col sep=comma]{
    label,step,PdF,Opt,save
    3k,3,7.66,5.83,50sec
    4k,4,10,9,60sec
    }\datatable

    \begin{tikzpicture}
    \begin{axis}[
    ybar,
    bar shift = 0pt,
    xtick pos = left,
    ytick pos = left,
    xtick={3,…,10},
    xticklabels from table={\datatable}{label}
    ]

    \addplot[fill=red] table [x expr=\thisrow{step}-0.01, y=PdF] {\datatable};
    \addplot[fill=blue] table [x expr=\thisrow{step}+0.01, y=Opt] {\datatable};

    \foreach \x in {0,1}{ % per ogni riga nella tabella
    \pgfplotstablegetelem{\x}{step}\of{\datatable};
    \pgfmathsetmacro{\currX}{\pgfplotsretval} %salva coordinata x
    \pgfplotstablegetelem{\x}{PdF}\of{\datatable};
    \pgfmathsetmacro{\currY}{\pgfplotsretval} %salva coordinata y
    \pgfplotstablegetelem{\x}{save}\of{\datatable};
    \newcommand{\currText}{\pgfplotsretval}; % salva il testo da stampare in cima
    \typeout{\currY};
    \edef\temp{\noexpand \node at (axis cs: \currX, \currY) {\currText};}\temp % come cambiare font?
    }
    \end{axis}
    \end{tikzpicture}
    \end{document}
    `

Visualizzazione 0 filoni di risposte
  • Autore
    Risposte
    • #109490
      Up
      0
      Down
      ::


      Ti basta inserire un \noexpand: `\edef\temp{\noexpand \node[font=\noexpand\tiny] at (axis cs: \currX, \currY) {\currText};}\temp % come cambiare font?` Cambia da [tt]\tiny[/tt] in quello che preferisci. Comunque, proverei con le opzioni nodes near coords.. probabilmente è più semplice.

      Ciao
      Claudio

Visualizzazione 0 filoni di risposte
  • Devi essere connesso per rispondere a questo topic.

Go to top