Problemi a scrivere e ruotare un testo

  • Creatore
    Topic
  • #108323
    Up
    0
    Down
    ::


    Sto creando un grafico e avevo la necessità di aggiungere a ognuna delle curve tracciate l’indicazione della temperatura di riferimento in Kelvin, così memore dell’articolo Grafici-pgfplots su ArsTeXnica n°12 ottobre 2011 sono andato a cercare come automatizzare l’inserimento delle scritte, il codice originale era
    `\pgfkeys{
    /pgfplots/linelabel/.style args={#1:#2:#3}{%
    name path global=labelpath,
    execute at end plot={
    \path [name path global=labelpositionline]
    (rel axis cs:#1,0) —
    (rel axis cs:#1,1);
    \draw [help lines,text=black,
    inner sep=0pt,
    name intersections={
    of=labelpath and labelpositionline
    }]
    (intersection-1) — +(#2)
    node [label={#3}] {};
    }
    }
    }`
    Io l’ho leggermente modificato secondo le mie esigenze personali, ora però sorgono due problemi, nell’esempio che riporto ho introdotto [tt]above,sloped[/tt] per il testo, ma a quanto pare sloped viene ignorato e non capisco il perché.
    Il secondo problema è che se invece di [tt]\SI{100}{\kelvin}[/tt] inserisco [tt]\SI{\T}{\kelvin}[/tt] che appartiene al ciclo foreach mi da un errore.

    `\documentclass[a4paper,11pt,draft]{book} %serve per generare le parole calde e per le figure
    \usepackage[italian]{babel}
    \usepackage[utf8]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage{verbatim}
    \usepackage{siunitx}
    \sisetup{output-decimal-marker={,},
    list-final-separator = { e },
    list-separator = {, },
    table-figures-integer=1,
    table-figures-decimal=3}

    \usepackage{tikz}
    \usepackage{pgfplots,relsize,pgfplotstable,lmodern,pgfkeys, pgfmath}
    \pgfplotsset{compat=1.12}
    \pgfkeys{
    /pgf/number format/.cd, % “change directory”
    use comma
    }
    \usetikzlibrary{plotmarks,arrows.meta,calc,intersections,through,backgrounds,bending,angles,quotes}
    \usetikzlibrary{positioning,patterns,decorations.markings}

    \begin{document}

    \begin{tikzpicture}
    \pgfkeys{
    /pgfplots/linelabel/.style args={#1:#2:#3}{%
    name path global=labelpath,
    execute at end plot={
    \path [name path global=labelpositionline]
    (rel axis cs:0,#1) —
    (rel axis cs:1,#1);
    \draw [name intersections={
    of=labelpath and labelpositionline
    }]
    (intersection-1) node[{#2}] {#3};
    }
    }
    }

    \begin{loglogaxis}[ymin=10e-7,ymax=10e8,ytickten={-6,-4,…,8},grid=both,
    width=0.9\textwidth]
    \foreach \T in {100,300,500,1000,2000}{
    \addplot[domain=0.1:1000,samples=50,smooth,linelabel=0.05:{above,sloped}:\SI{\T}{\kelvin}]
    {(3.74177e8)/(x^5*(exp(1.43878e4/(x*\T))-1))};
    }

    \end{loglogaxis}

    \end{tikzpicture}`

    Che cosa sbaglio?

Visualizzazione 6 filoni di risposte
  • Autore
    Risposte
    • #108324
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Per la seconda cosa io scriverei [tt]\T\si{kelvin[/tt] perché \T rischia di rompersi nello sballotamento che ne fa \SI prima di mettere fuori il risultato.

        Scusa se ti correggo; kelvin si scrive con l’iniziale minuscola, come tutti i nomi delle unità di misura, anche se il nomi delle unità derivano da nomi di persone; volt, joule, ampere, newton, eccetera. L’unico trattamento particolare che questi nomi di unità che derivano da nomi di persone ricevono in italiano è che sono invarianti al plurale.

        Per la prima non so dirti; ne sai molto più tu di me.

      • #108325
        Up
        0
        Down
        ::


        Hai ragione Claudio, sicuramente [tt] \T\si{kelvin}[/tt] può evitare comportamenti fragili. probabilmente se troverò una soluzione al primo problema, o mi sarà fornita, adotterò il tuo consiglio.
        Resta anche vero che comunque se chiedessi di scrivere anche solo [tt]\T[/tt] mi da errore.

      • #108326
        Up
        0
        Down
        ::


        Alla fine ho aggirato il problema scrivendo per ogni curva
        `\pathplot (\x,{(3.74177e8)/(\x^5*(exp(1.43878e4/(\x*100))-1))});
        \path[name path=retta](rel axis cs:0,0.06)–(rel axis cs:1,0.06);
        \path[name intersections={of=retta and curva}];
        \node[above,rotate=75,scale=0.8] at (intersection-1) {\scriptsize\SI{100}{\kelvin}};`
        In effetti ragionando sono arrivato alla conclusione che, se il punto è frutto dell’intersezione tra due curve, la libreria [tt]intersections[/tt] non può sapere a quale delle due curve sto facendo riferimento per il comando [tt]sloped[/tt] e quindi l’unica soluzione è proprio fare qualche prova con [tt]rotate[/tt].
        Resta invece un mistero il perché \T non venga passato come numero. Per il momento non indagherò oltre, riporto comunque il risultato finale, così se qualcuno ha osservazioni sull’aspetto grafico posso modificare.

        [attachment=1775]prv.pdf[/attachment]

        Attachments:
        You must be logged in to view attached files.
      • #108327
        robitex
        Amministratore del forum
          Up
          0
          Down
          ::

          schwarz89it” post=108493Alla fine ho aggirato il problema scrivendo per ogni curva
          `\pathplot (\x,{(3.74177e8)/(\x^5*(exp(1.43878e4/(\x*100))-1))});
          \path[name path=retta](rel axis cs:0,0.06)–(rel axis cs:1,0.06);
          \path[name intersections={of=retta and curva}];
          \node[above,rotate=75,scale=0.8] at (intersection-1) {\scriptsize\SI{100}{\kelvin}};`
          In effetti ragionando sono arrivato alla conclusione che, se il punto è frutto dell’intersezione tra due curve, la libreria [tt]intersections[/tt] non può sapere a quale delle due curve sto facendo riferimento per il comando [tt]sloped[/tt] e quindi l’unica soluzione è proprio fare qualche prova con [tt]rotate[/tt].
          Resta invece un mistero il perché \T non venga passato come numero. Per il momento non indagherò oltre, riporto comunque il risultato finale, così se qualcuno ha osservazioni sull’aspetto grafico posso modificare.

          [attachment=1775]prv.pdf[/attachment]

          Come grafico è un bel grafico!
          Ti scrivo però per due eventuali miglioramenti:
          * accorciare l’asse ascisse a sinistra (spazio bianco altra la fine delle curve forse un po’ troppo largo)
          * indicare in modo diverso le ascisse delle frequenza Violetto e Rosso
          Queste linee verticali infatti, hanno lo stesso stile delle curve. Forse un tratteggio migliorerebbe la leggibilità delle curve, magari mettendo in verticale i testi Violetto e Rosso.

          Sono dettagli. Mia opinione.
          R.

        • #108328
          Up
          0
          Down
          ::


          Ti ringrazio, sono proprio quei dettagli che mi interessano, ora provvedo. Proverò anche a mettere la scritta in verticale di Rosso e Violetto, temo solo che vada sopra il valore 10. Proverò con un tratto e punto per le linee.

        • #108329
          robitex
          Amministratore del forum
            Up
            0
            Down
            ::

            schwarz89it” post=108495Ti ringrazio, sono proprio quei dettagli che mi interessano, ora provvedo. Proverò anche a mettere la scritta in verticale di Rosso e Violetto, temo solo che vada sopra il valore 10. Proverò con un tratto e punto per le linee.

            Ciao.
            Lo stile tratto punto non lo userei perché aggiunge un tipo in più al grafico confondendo intuitivamente sul significato della linea.
            Io farei tratteggiate le linee verticali, oppure passerei a inserire un rettangolo grigio pieno tra le due linee.
            Molto più significativo perché evidenzia il range di frequenze, mentre le linee solo l’inizio e il termine di detto range.

            Siamo proprio ai dettagli più minuti.
            Forse vale la pena solo se si hanno parecchi grafici a cui applicare gli stessi dettagli.
            Un saluto.
            R.

          • #108330
            Up
            0
            Down
            ::

            schwarz89it” post=108479[…]
            Che cosa sbaglio?

            Puoi risolvere il problema di [tt]\T[/tt] con questo bieco trucco:
            `
            \foreach \T in {100,300,500,1000,2000}{
            \begingroup\edef\x{\endgroup
            \noexpand\addplot[
            domain=0.1:1000,
            samples=50,
            smooth,
            linelabel=0.05:{above,sloped}:\noexpand\tiny\SI{\T}{\kelvin},
            ]}\x{(3.74177e8)/(x^5*(exp(1.43878e4/(x*\T))-1))};
            `

            Ho aggiunto [tt]\tiny[/tt] nel tentativo di evitare sovrapposizioni, che però ci sono ancora. Suppongo si possano eliminare aumentando la larghezza. Non occorre [tt]\noexpand[/tt] davanti a [tt]\SI[/tt] e [tt]\kelvin[/tt] perché sono comandi protetti.

            Ciao
            Enrico

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

        Go to top