Allineamento di tkzpicture in ambiente tabular

  • Creatore
    Topic
  • #103229
    Enrico Maria
    Partecipante
      Up
      0
      Down
      ::


      Un esempio minimo compilabile è il seguente
      `\documentclass[a4paper,11pt]{article}

      \usepackage{xcolor}
      \usepackage[utf8]{inputenc}
      \usepackage{amsmath,amsfonts,amssymb}
      \usepackage{bm}
      \usepackage[super]{nth}
      \usepackage{calc}
      \usepackage{tikz}
      %\usepackage{pbox}
      \usetikzlibrary{decorations}
      \usetikzlibrary{calc}
      \usetikzlibrary{patterns}
      \usetikzlibrary{shapes.arrows}
      \usepackage{tikzscale}
      \usepackage{pgfplots}
      \usepackage{tabularx}
      \pgfplotsset{compat=1.12}
      \usepackage[font=small, format=hang, labelfont={sf,bf}, tableposition=top, figureposition=bottom]{caption}

      \begin{document}

      \begin{figure}
      \centering
      \begin{tabular}{lr}
      %\tikzsetnextfilename{re1}
      \includegraphics{immagini/tikz/wpvsw/re1.tikz}
      &
      %\tikzsetnextfilename{im1}
      \includegraphics{immagini/tikz/wpvsw/im1.tikz}
      \\
      %\tikzsetnextfilename{re2}
      \includegraphics{immagini/tikz/wpvsw/re2.tikz}
      &
      %\tikzsetnextfilename{im2}
      \includegraphics{immagini/tikz/wpvsw/im2.tikz}
      \\
      %\tikzsetnextfilename{re3}
      \includegraphics{immagini/tikz/wpvsw/re3.tikz}
      &
      %\tikzsetnextfilename{im3}
      \includegraphics{immagini/tikz/wpvsw/im3.tikz}
      \\
      \end{tabular}%
      \caption{\textsl{Left}: Plot of the real part of the modified wavenumber, $w'_\text{r}$, vs. wavenumber $w$ for first derivative approximations: (a) \nth{2} order explicit; (b) \nth{4} order explicit.}
      \end{figure}
      \end{document}`

      che si poggia sui file seguenti (upper-left, middle-left, lower-left, upper-right, middle-right, lower-right), messi assieme seguendo l’esempio della guida di tikz
      `\begin{tikzpicture}[baseline,trim axis left]
      \tikzset{every mark/.append style={scale=.75,fill=white}}
      \pgfplotsset{every tick label/.append style={
      /pgf/number format/precision=1,
      /pgf/number format/fixed,
      /pgf/number format/fixed zerofill
      }}
      \pgfplotsset{every axis plot/.append style={line width=.25pt}}

      \begin{axis}[width=.5\textwidth,height=.5\textwidth,
      ylabel={$\text{Re}\left(k'\right)$},
      xmin=0,xmax=pi,ymin=0,ymax=pi,axis equal image=true,
      xtick={.5,1,…,3},
      xticklabels={},
      ytick={.5,1,…,3},
      grid=major]%,trim axis left]
      \addplot[mark=none] {x};
      \end{axis}

      \draw[red]
      (current axis.below south west)
      rectangle (current axis.above north east);
      \draw[red]
      (current axis.left of south west)
      rectangle (current axis.right of north east);

      \end{tikzpicture}
      `

      `\begin{tikzpicture}[baseline,trim axis left]
      \tikzset{every mark/.append style={scale=.75,fill=white}}
      \pgfplotsset{every tick label/.append style={
      /pgf/number format/precision=1,
      /pgf/number format/fixed,
      /pgf/number format/fixed zerofill
      }}
      \pgfplotsset{every axis plot/.append style={line width=.25pt}}

      \begin{axis}[width=.5\textwidth,height=.5\textwidth,
      xmin=0,xmax=pi,ymin=0,ymax=pi,axis equal image=true,
      xtick={.5,1,…,3},
      xticklabels={},
      ylabel={$\text{Re}\left(k'\right)$},
      ytick={.5,1,…,3},
      grid=major]%,trim axis left]
      \addplot[mark=none] {x};
      \end{axis}

      \draw[red]
      (current axis.below south west)
      rectangle (current axis.above north east);
      \draw[red]
      (current axis.left of south west)
      rectangle (current axis.right of north east);

      \end{tikzpicture}
      `

      `\begin{tikzpicture}[baseline,trim axis left]
      \tikzset{every mark/.append style={scale=.75,fill=white}}
      \pgfplotsset{every tick label/.append style={
      /pgf/number format/precision=1,
      /pgf/number format/fixed,
      /pgf/number format/fixed zerofill
      }}
      \pgfplotsset{every axis plot/.append style={line width=.25pt}}

      \begin{axis}[width=.5\textwidth,height=.5\textwidth,
      xlabel={$k$},
      xmin=0,xmax=pi,ymin=0,ymax=pi,axis equal image=true,
      xtick={.5,1,…,3},
      %xticklabels={},
      ylabel={$\text{Re}\left(k'\right)$},
      ytick={.5,1,…,3},
      grid=major]%,trim axis left]
      \addplot[mark=none] {x};
      \end{axis}

      \draw[red]
      (current axis.below south west)
      rectangle (current axis.above north east);
      \draw[red]
      (current axis.left of south west)
      rectangle (current axis.right of north east);

      \end{tikzpicture}
      `

      `\begin{tikzpicture}[baseline,trim axis right]
      \tikzset{every mark/.append style={scale=.75,fill=white}}
      \pgfplotsset{every tick label/.append style={
      /pgf/number format/precision=1,
      /pgf/number format/fixed,
      /pgf/number format/fixed zerofill
      }}
      \pgfplotsset{every axis plot/.append style={line width=.25pt}}

      \begin{axis}[width=.5\textwidth,height=.5\textwidth,
      ylabel={$\text{Im}\left(k'\right)$},
      xmin=0,xmax=pi,ymin=-2e-2,ymax=1.6e-1,
      xtick={.5,1,…,3},
      xticklabels={},
      ytick={0,2e-2,4e-2,6e-2,8e-2,10e-2,12e-2,14e-2,16e-2},
      scaled y ticks={base 10:2},tick scale binop=\times,
      yticklabel pos=right,
      grid=major]%,trim axis right]
      \end{axis}

      \draw[red]
      (current axis.below south west)
      rectangle (current axis.above north east);
      \draw[red]
      (current axis.left of south west)
      rectangle (current axis.right of north east);

      \end{tikzpicture}`

      `\begin{tikzpicture}[baseline,trim axis right]
      \tikzset{every mark/.append style={scale=.75,fill=white}}
      \pgfplotsset{every tick label/.append style={
      /pgf/number format/precision=1,
      /pgf/number format/fixed,
      /pgf/number format/fixed zerofill
      }}
      \pgfplotsset{every axis plot/.append style={line width=.25pt}}

      \begin{axis}[width=.5\textwidth,height=.5\textwidth,
      xticklabels={},ylabel={$\text{Im}\left(k'\right)$},
      xmin=0,xmax=pi,ymin=-2e-2,ymax=1.6e-1,
      xtick={.5,1,…,3},
      ytick={0,2e-2,4e-2,6e-2,8e-2,10e-2,12e-2,14e-2,16e-2},
      scaled y ticks={base 10:2},tick scale binop=\times,
      yticklabel pos=right,
      grid=major]%,trim axis right]
      \end{axis}

      \draw[red]
      (current axis.below south west)
      rectangle (current axis.above north east);
      \draw[red]
      (current axis.left of south west)
      rectangle (current axis.right of north east);
      \end{tikzpicture}`

      `\begin{tikzpicture}[baseline,trim axis right]
      \tikzset{every mark/.append style={scale=.75,fill=white}}
      \pgfplotsset{every tick label/.append style={
      /pgf/number format/precision=1,
      /pgf/number format/fixed,
      /pgf/number format/fixed zerofill
      }}
      \pgfplotsset{every axis plot/.append style={line width=.25pt}}

      \begin{axis}[width=.5\textwidth,height=.5\textwidth,
      xlabel={$k$},ylabel={$\text{Im}\left(k'\right)$},
      xmin=0,xmax=pi,ymin=-2e-2,ymax=1.6e-1,
      xtick={.5,1,…,3},
      ytick={0,2e-2,4e-2,6e-2,8e-2,10e-2,12e-2,14e-2,16e-2},
      scaled y ticks={base 10:2},tick scale binop=\times,
      yticklabel pos=right,
      grid=major]%,trim axis right]
      \end{axis}

      \draw[red]
      (current axis.below south west)
      rectangle (current axis.above north east);
      \draw[red]
      (current axis.left of south west)
      rectangle (current axis.right of north east);

      \end{tikzpicture}`

      Come potete vedere ho usato trim axis left (e right) come opzione di tikzpicture, ottenendo il primo file allegato (cattura2). Ho postato la domanda anche su tex.stackexchange, e un consiglio è stato di usare trim axis left (e right) come opzione dell’ambiente axis. Ho provato, ma il risultato è quello del secondo file allegato (cattura).

      Grazie per l’attenzione,
      Enrico Maria

      EDIT: in entrambi i casi l’allineamento relativo tra le varie tele mi sembra perfetto, il fatto è che non occupano esattamente la \textwidth (o ne occupano di meno, o di più).
      Casomai ci si chiedesse perché imposto width ed height nelle opzioni di \begin{axis} anziché in quelle di \includegraphics, la risposta è che è l’unico modo che ho trovato di far uscire delle tele quadrata anche per assi x e y con scale ad ordini di grandezza diverse (quelle a destra)

      Attachments:
      You must be logged in to view attached files.
    Visualizzazione 3 filoni di risposte
    • Autore
      Risposte
      • #103230
        Up
        0
        Down
        ::


        Hai provato a usare la libreria groupplots di pgfplots?

        Ciao
        Claudio

      • #103231
        Enrico Maria
        Partecipante
          Up
          0
          Down
          ::


          No, perché preferirei avere diversi ambienti tikzpicture così che vengano esternalizzati separatamente.

          Ora che ci penso, però, non sono utilizzabili, dato che a 4 di essi mancano i label e ticklabel dell’asse x.. Ok, provo con groupplots

        • #103232
          Enrico Maria
          Partecipante
            Up
            0
            Down
            ::


            Be’, decisamente la soluzione più facile, veloce e precisa.

            Grazie mille!

            EDIT: Chiedo di nuovo aiuto perché mi sono reso conto di un piccolo problema.
            Ai fini dell’esternalizzazione, salvo tutto l’ambiente tikzpicture in un file, ad esempio tiles.tikz, che poi richiamo nel main nel modo seguente.
            `\begin{figure}[p]
            \centering
            \tikzsetnextfilename{tilesexternal}
            \includegraphics[width=\textwidth]{tiles.tikz}
            \caption{Didascalia}
            \label{fig:etichetta}
            \end{figure}`

            Faccio presente che in tiles.tikz le opzioni di groupplot sono date come segue,
            `\begin{groupplot}[group style={group size=2 by 3,horizontal sep=12pt,vertical sep=12pt,x descriptions at=edge bottom},height=.5\textwidth,width=.5\textwidth]`
            in quanto mi interessa che i vari axis siano tutti quardati, indipendentemente dai vari xmin,xmax,ymin,ymax (i quali vengono assegnati di volta in volta come opzioni di \nextgroupplot)

            Il risultato è bello, tranne per il fatto che l’opzione [width=\textwidth] di \includegraphics mi rimpicciolisce tutti i label e ticklabel..

            Ho cercato di non buttare giù codici come prima, ma se servisse li posso mettere.

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


              Ciao.
              Son contento che il risultato sia bello 🙂
              In realtà il comando \includegraphics scala tutta l’immagine per adattarla alla dimensione specificata (nel tuo caso la larghezza della gabbia del testo).

              Quello che puoi fare è: ridurre le dimensioni dei grafici perché stiano in una pagina, oppure far sbordare di un po’ sui bordi l’immagine.

              Se non specifichi l’opzione width, l’immagine verrà inserita nelle dimensioni originali. Compilando nel file di log troverai un warning che ti dirà di quanti punti l’immagine è più grande della gabbia.

              A questo punto puoi decidere cosa fare.
              Ridurre l’immagine riducendo le dimensioni della tela richiede che questo non alteri il significato e la leggibilità dei grafici.
              Far sbordare invece l’immagine richiede magari un po’ di lavoro TeXnico per regolare la sbordatura.
              Saluti.
              R.

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

          Go to top