Problema con i mark in addplot

  • Creatore
    Topic
  • #100775
    Up
    0
    Down
    ::


    Buonasera a tutti,
    Sto cercando di creare un grafico con pgfplots che mostri due curve che hanno però scale fortemente diverse e ho cercato di seguire le indicazioni riportate nella guida scritta da Agostino De Marco e Roberto Giacomelli.
    Qui riporto il codice che ho usato
    `
    \begin{figure}
    \centering

    \pgfplotsset{
    every axis x label/.append style = {
    font = \relsize{0.9}
    },
    every axis y label/.append style = {
    font = \relsize{0.9},
    rotate = -90,
    xshift = -0.5em
    },
    minor grid style={dotted}
    }

    \begin{tikzpicture}
    \pgfplotsset{
    width=8cm, height=15cm,
    scale only axis,
    no markers
    }
    %
    %
    \begin{axis} [
    clip=false,
    width=8cm,
    hide y axis,
    axis x line*=bottom,
    xmin =0, xmax = 22,
    ymin = -40, ymax = 0,
    xtick={0,2,…,22},
    minor xtick={0.2,0.4,…,21.8},
    %ytick={0,-2,…,-40},
    %minor ytick={-0.2,-0.4,…,-40},
    xlabel = {$q_p$ (\si{\mega\pascal})},
    ]
    \end{axis}
    %
    \begin{axis} [
    clip=false,
    height=15cm,
    hide x axis,
    axis y line*=left,
    xmin =0, xmax = 22,
    ymin = -40, ymax = 0,
    ytick={0,-2,…,-40},
    minor ytick={-0.2,-0.4,…,-40},
    ylabel = \parbox{0.75cm}{\centering $y$ \\ \centering (\si{\meter})}
    ]
    \end{axis}
    %
    %
    \begin{axis}[
    hide x axis,
    hide y axis,
    xmin=0, xmax=22,
    ymin=-40, ymax=0
    ]
    \tikzset{every mark/.append style={scale=0.5}}
    \addplot[mark=o] coordinates{
    (1,0)
    (1.8,-0.2)
    (1.6,-0.4)
    (1.4,-0.6)
    (0.8,-0.8)
    (0.5,-1)
    (0.7,-1.2)
    (0.4,-1.4)
    (1.3,-1.6)
    (1.8,-1.8)
    (3,-2)
    (4.6,-2.2)
    (5,-2.4)
    (1.4,-2.6)
    (0.5,-2.8)
    (0.5,-3)
    (2.6,-3.2)
    (2.8,-3.4)
    (0.7,-3.6)
    (0.4,-3.8)
    (0.3,-4)
    (0.2,-4.2)
    (0.6,-4.4)
    (0.8,-4.6)
    (2,-4.8)
    (2.7,-5)
    (2,-5.2)
    (0.9,-5.4)
    (1.6,-5.6)
    };
    \end{axis}
    %
    %
    \begin{axis} [
    clip=false,
    width=8cm,
    yshift=-1.5cm,
    hide y axis,
    axis x line*=bottom,
    xmin =0, xmax = 0.5,
    ymin = -40, ymax = 0,
    xtick={0,0.1,…,0.5},
    minor xtick={0.025,0.05,…,0.5},
    xlabel = {$q_s$ (\si{\mega\pascal})},
    ]
    \end{axis}
    \begin{axis} [
    hide x axis,
    hide y axis,
    xmin=0, xmax=0.5,
    ymin=-40, ymax=0,
    ]
    %\tikzset{every mark/.append style={scale=1}}
    \addplot+ coordinates{
    (0.01591,0)
    (0.0282,-0.2)
    (0.03059,-0.4)
    (0.01781,-0.6)
    (0.01548,-0.8)
    (0.00704,-1)
    (0.01393,-1.2)
    (0.00587,-1.4)
    (0.0238,-1.6)
    (0.07299,-1.8)
    (0.11651,-2)
    (0.20558,-2.2)
    (0.20811,-2.4)
    (0.0589,-2.6)
    (0.02092,-2.8)
    (0.01825,-3)
    (0.10927,-3.2)
    (0.12132,-3.4)
    (0.02564,-3.6)
    (0.01713,-3.8)
    (0.0133,-4)
    (0.00709,-4.2)
    (0.02641,-4.4)
    (0.0334,-4.6)
    (0.0758,-4.8)
    };
    \end{axis}
    \end{tikzpicture}
    \end{figure}
    `
    A questo punti i miei problemi sono in realtà 3:

    1. Perché il secondo asse delle x che creo non vede come ultimo valore stampato a video 0.5?
    2. perché, pur usando prima di addplot, il comando \tikzset{every mark/.append style={scale=0.5}} non ottengo i cerchietti nei punti?
    3. Come posso inserire una legenda unica che mostri la spiegazione delle 2 curve?

    L’ultimo punto forse richiede una piccola spiegazione aggiuntiva, avevo scritto:
    `
    (0.0758,-4.8)
    };
    \legend{$q_p$, $q_s$}
    \end{axis}
    \end{tikzpicture}
    \end{figure}
    `
    Essendoci tuttavia un solo grafico dentro all’ultimo gruppo di axis mi riporta solo una riga. Spero di essere riuscito a spiegarmi, ringrazio fin da ora chiunque possa aiutarmi in questo mio piccolo problema.

Visualizzazione 1 filone di risposte
  • Autore
    Risposte
    • #100776
      Up
      0
      Down
      ::

      schwarz89it” post=100476Buonasera a tutti,
      Sto cercando di creare un grafico con pgfplots che mostri due curve che hanno però scale fortemente diverse e ho cercato di seguire le indicazioni riportate nella guida scritta da Agostino De Marco e Roberto Giacomelli.
      Qui riporto il codice che ho usato
      `
      \begin{figure}
      \centering

      \pgfplotsset{
      every axis x label/.append style = {
      font = \relsize{0.9}
      },
      every axis y label/.append style = {
      font = \relsize{0.9},
      rotate = -90,
      xshift = -0.5em
      },
      minor grid style={dotted}
      }

      \begin{tikzpicture}
      \pgfplotsset{
      width=8cm, height=15cm,
      scale only axis,
      no markers
      }
      %
      %
      \begin{axis} [
      clip=false,
      width=8cm,
      hide y axis,
      axis x line*=bottom,
      xmin =0, xmax = 22,
      ymin = -40, ymax = 0,
      xtick={0,2,…,22},
      minor xtick={0.2,0.4,…,21.8},
      %ytick={0,-2,…,-40},
      %minor ytick={-0.2,-0.4,…,-40},
      xlabel = {$q_p$ (\si{\mega\pascal})},
      ]
      \end{axis}
      %
      \begin{axis} [
      clip=false,
      height=15cm,
      hide x axis,
      axis y line*=left,
      xmin =0, xmax = 22,
      ymin = -40, ymax = 0,
      ytick={0,-2,…,-40},
      minor ytick={-0.2,-0.4,…,-40},
      ylabel = \parbox{0.75cm}{\centering $y$ \\ \centering (\si{\meter})}
      ]
      \end{axis}
      %
      %
      \begin{axis}[
      hide x axis,
      hide y axis,
      xmin=0, xmax=22,
      ymin=-40, ymax=0
      ]
      \tikzset{every mark/.append style={scale=0.5}}
      \addplot[mark=o] coordinates{
      (1,0)
      (1.8,-0.2)
      (1.6,-0.4)
      (1.4,-0.6)
      (0.8,-0.8)
      (0.5,-1)
      (0.7,-1.2)
      (0.4,-1.4)
      (1.3,-1.6)
      (1.8,-1.8)
      (3,-2)
      (4.6,-2.2)
      (5,-2.4)
      (1.4,-2.6)
      (0.5,-2.8)
      (0.5,-3)
      (2.6,-3.2)
      (2.8,-3.4)
      (0.7,-3.6)
      (0.4,-3.8)
      (0.3,-4)
      (0.2,-4.2)
      (0.6,-4.4)
      (0.8,-4.6)
      (2,-4.8)
      (2.7,-5)
      (2,-5.2)
      (0.9,-5.4)
      (1.6,-5.6)
      };
      \end{axis}
      %
      %
      \begin{axis} [
      clip=false,
      width=8cm,
      yshift=-1.5cm,
      hide y axis,
      axis x line*=bottom,
      xmin =0, xmax = 0.5,
      ymin = -40, ymax = 0,
      xtick={0,0.1,…,0.5},
      minor xtick={0.025,0.05,…,0.5},
      xlabel = {$q_s$ (\si{\mega\pascal})},
      ]
      \end{axis}
      \begin{axis} [
      hide x axis,
      hide y axis,
      xmin=0, xmax=0.5,
      ymin=-40, ymax=0,
      ]
      %\tikzset{every mark/.append style={scale=1}}
      \addplot+ coordinates{
      (0.01591,0)
      (0.0282,-0.2)
      (0.03059,-0.4)
      (0.01781,-0.6)
      (0.01548,-0.8)
      (0.00704,-1)
      (0.01393,-1.2)
      (0.00587,-1.4)
      (0.0238,-1.6)
      (0.07299,-1.8)
      (0.11651,-2)
      (0.20558,-2.2)
      (0.20811,-2.4)
      (0.0589,-2.6)
      (0.02092,-2.8)
      (0.01825,-3)
      (0.10927,-3.2)
      (0.12132,-3.4)
      (0.02564,-3.6)
      (0.01713,-3.8)
      (0.0133,-4)
      (0.00709,-4.2)
      (0.02641,-4.4)
      (0.0334,-4.6)
      (0.0758,-4.8)
      };
      \end{axis}
      \end{tikzpicture}
      \end{figure}
      `
      A questo punti i miei problemi sono in realtà 3:

      1. Perché il secondo asse delle x che creo non vede come ultimo valore stampato a video 0.5?
      2. perché, pur usando prima di addplot, il comando \tikzset{every mark/.append style={scale=0.5}} non ottengo i cerchietti nei punti?
      3. Come posso inserire una legenda unica che mostri la spiegazione delle 2 curve?

      L’ultimo punto forse richiede una piccola spiegazione aggiuntiva, avevo scritto:
      `
      (0.0758,-4.8)
      };
      \legend{$q_p$, $q_s$}
      \end{axis}
      \end{tikzpicture}
      \end{figure}
      `
      Essendoci tuttavia un solo grafico dentro all’ultimo gruppo di axis mi riporta solo una riga. Spero di essere riuscito a spiegarmi, ringrazio fin da ora chiunque possa aiutarmi in questo mio piccolo problema.

      Ciao e benvenuto sul forum 🙂

      Potresti includere un esempio minimo compilabile: il tuo codice al momento non compila e non è semplice andare a capire quali pacchetti/librerie tu possa avere caricato. Per il problema 2, quel comando serve semplicemente per scalare la dimensione dei mark: non certo per impostarli come cerchi. Quindi il problema è nella definizione di addplot. Per il problema 3, probabilmente la soluzione migliore è quella proposta nel manuale nella sezione Legends Outside Of an Axis.

      Ciao
      Claudio

    • #100777
      Up
      0
      Down
      ::


      Intanto grazie per il benvenuto e per avermi risposto, mi scuso per non aver pensato fin da subito di riportare anche il preambolo con i pacchetti che uso. Quello riportato è quello completo che sto usando.
      `
      \documentclass[a4paper,11pt,twoside,openright,draft]{book}
      \usepackage[italian]{babel}
      \usepackage{graphicx}
      %\graphicspath{{immag/}}
      \usepackage{subfig}
      \usepackage{indentfirst}
      \usepackage{amsmath}
      \usepackage[latin1]{inputenc}
      \usepackage{booktabs}
      \usepackage{multirow}
      \usepackage{longtable}
      \usepackage{lscape}
      \usepackage{verbatim}
      \usepackage{xkeyval}
      \usepackage{siunitx}
      \sisetup{output-decimal-marker={,}}
      \usepackage{dcolumn}
      \usepackage[margin=10pt,font=small,labelfont=bf,labelsep=endash,format=hang,justification=raggedright]{caption}
      \captionsetup[table]{position=bottom}

      \usepackage[table]{xcolor}
      \usepackage{url}

      \usepackage[pdfborder={0 0 0}]{hyperref}
      \hypersetup{pdfborder=0 0 0}

      \usepackage{pgfplots,relsize,pgfplotstable,lmodern,pgfkeys}
      \usetikzlibrary{plotmarks}

      \renewcommand{\thefigure}{\arabic{chapter}.\arabic{figure}}
      \renewcommand{\thetable}{\arabic{chapter}.\arabic{table}}
      \setcounter{tocdepth}{3}
      \setcounter{secnumdepth}{3}

      \DeclareMathOperator{\tg}{tg}
      \DeclareMathOperator{\arctg}{arctg}
      \newcommand{\grad}{$^\circ$}
      \newcommand{\ud}{\mathrm{d}}

      \makeatletter
      \def\cleardoublepage{\clearpage\if@twoside \ifodd\c@page\else
      \hbox{}
      \thispagestyle{empty}
      \newpage
      \if@twocolumn\hbox{}\newpage\fi\fi\fi}
      \makeatother

      \pagestyle{plain}

      \begin{document}
      \chapter{Prova}

      \begin{figure}
      \centering

      \pgfplotsset{
      every axis x label/.append style = {
      font = \relsize{0.9}
      },
      every axis y label/.append style = {
      font = \relsize{0.9},
      rotate = -90,
      xshift = -0.5em
      },
      minor grid style={dotted}
      }

      \begin{tikzpicture}
      \pgfplotsset{
      width=8cm, height=15cm,
      scale only axis,
      no markers
      }
      %
      %
      \begin{axis} [
      clip=false,
      width=8cm,
      hide y axis,
      axis x line*=bottom,
      xmin =0, xmax = 22,
      ymin = -40, ymax = 0,
      xtick={0,2,…,22},
      minor xtick={0.2,0.4,…,21.8},
      %ytick={0,-2,…,-40},
      %minor ytick={-0.2,-0.4,…,-40},
      xlabel = {$q_p$ (\si{\mega\pascal})},
      ]
      \end{axis}
      %
      \begin{axis} [
      clip=false,
      height=15cm,
      hide x axis,
      axis y line*=left,
      xmin =0, xmax = 22,
      ymin = -40, ymax = 0,
      ytick={0,-2,…,-40},
      minor ytick={-0.2,-0.4,…,-40},
      ylabel = \parbox{0.75cm}{\centering $y$ \\ \centering (\si{\meter})}
      ]
      \end{axis}
      %
      %
      \begin{axis}[
      hide x axis,
      hide y axis,
      xmin=0, xmax=22,
      ymin=-40, ymax=0
      ]
      \tikzset{every mark/.append style={scale=0.5}}
      \addplot[mark=o] coordinates{
      (1,0)
      (1.8,-0.2)
      (1.6,-0.4)
      (1.4,-0.6)
      (0.8,-0.8)
      (0.5,-1)
      (0.7,-1.2)
      (0.4,-1.4)
      (1.3,-1.6)
      (1.8,-1.8)
      (3,-2)
      (4.6,-2.2)
      (5,-2.4)
      (1.4,-2.6)
      (0.5,-2.8)
      (0.5,-3)
      (2.6,-3.2)
      (2.8,-3.4)
      (0.7,-3.6)
      (0.4,-3.8)
      (0.3,-4)
      (0.2,-4.2)
      (0.6,-4.4)
      (0.8,-4.6)
      (2,-4.8)
      (2.7,-5)
      (2,-5.2)
      (0.9,-5.4)
      (1.6,-5.6)
      };
      \end{axis}
      %
      %
      \begin{axis} [
      clip=false,
      width=8cm,
      yshift=-1.5cm,
      hide y axis,
      axis x line*=bottom,
      xmin =0, xmax = 0.5,
      ymin = -40, ymax = 0,
      xtick={0,0.1,…,0.5},
      minor xtick={0.025,0.05,…,0.5},
      xlabel = {$q_s$ (\si{\mega\pascal})},
      ]
      \end{axis}
      \begin{axis} [
      hide x axis,
      hide y axis,
      xmin=0, xmax=0.5,
      ymin=-40, ymax=0,
      ]
      %\tikzset{every mark/.append style={scale=1}}
      \addplot+ coordinates{
      (0.01591,0)
      (0.0282,-0.2)
      (0.03059,-0.4)
      (0.01781,-0.6)
      (0.01548,-0.8)
      (0.00704,-1)
      (0.01393,-1.2)
      (0.00587,-1.4)
      (0.0238,-1.6)
      (0.07299,-1.8)
      (0.11651,-2)
      (0.20558,-2.2)
      (0.20811,-2.4)
      (0.0589,-2.6)
      (0.02092,-2.8)
      (0.01825,-3)
      (0.10927,-3.2)
      (0.12132,-3.4)
      (0.02564,-3.6)
      (0.01713,-3.8)
      (0.0133,-4)
      (0.00709,-4.2)
      (0.02641,-4.4)
      (0.0334,-4.6)
      (0.0758,-4.8)
      };
      \end{axis}
      \end{tikzpicture}
      \end{figure}

      \end{document}
      `

      Per il problema del mark, introducevo \tikzset{every mark/.append style={scale=1}} solo per vedere se poteva esserci un effetto sulla dimensione, ma chiaramente che tipo di mark usare è specificato nelle dichiarazioni di addplot. La mia voleva essere solo una certezza, per non sentirmi rispondere che bastava aumentare il fattore di scala. Per il terzo punto ora andrò a leggere il manuale in merito alla legenda fuori dagli assi.

Visualizzazione 1 filone di risposte
  • Devi essere connesso per rispondere a questo topic.

Go to top