Unterbrochene Y-Ache bei zwei Balkenplots

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Unterbrochene Y-Ache bei zwei Balkenplots

von Grigi » So 7. Mai 2017, 12:48

Super! Dankeschön noch mal für die schnelle Hilfe und ein schönes Restwochenende. :wink:

von esdd » So 7. Mai 2017, 12:42

Grigi hat geschrieben: Eine kleine Frage habe ich noch: Kann man den Bruch in den Achsen (und evtl. auch am Balken) als solchen kennzeichnen? Also beispielsweise mit zwei diagonal verlaufenden Strichen.
Du kannst nach der letzten axis axis Umgebung Striche Deiner Wahl einzeichnen. Hier mal waagrechte:
...
       \end{axis}
       % Trennung von oberem und unterem Diagrammteil
       \fill[white] 
         ([shift={(-.2,.05)}]current axis.south west)coordinate(h1)
         rectangle 
         ([shift={(.2,-.05)}]current axis.south east)coordinate(h2)
       ;
       % Trennstriche an Achsen
       \draw
         (h1)--+(.4,0)
         (h1|-h2)--+(.4,0)
         (h2)--+(-.4,0)
         (h1-|h2)--+(-.4,0)
       ;
     \end{tikzpicture} 
     \captionof{figure}{Fliessfrontfortschritt der VARI-Referenzproben} 
     \label{fig.:FF-RTM-REF} 
   \end{minipage} 
\end{center} 
\end{document}
Bild

PS: Bitte sieh Dir an, was der Status "Rückfrage" bedeutet.
Dateianhänge
gl_barplotsplit.png
gl_barplotsplit.png (16.77 KiB) 1853 mal betrachtet

von Grigi » So 7. Mai 2017, 10:36

Wow, dankeschön esdd! Das sieht schon gut aus und kommt so in den Bericht :D

Eine kleine Frage habe ich noch: Kann man den Bruch in den Achsen (und evtl. auch am Balken) als solchen kennzeichnen? Also beispielsweise mit zwei diagonal verlaufenden Strichen.

Beste Grüße,
Grigi

von esdd » Sa 6. Mai 2017, 17:41

Eine Möglichkeit:
\begin{filecontents}{RTM_Ref_Pos.txt} 
 x   Messung   StdMessung
1   109   18
2   109   nan
3   110   nan
4   110   nan
5   108   nan
\end{filecontents} 
\begin{filecontents}{RTM_Ref_Time.txt} 
 Name      x   Rechenzeit 
 Messung      1   nan 
 Grob      2   1 
 Mittel      3   5 
 Fein      4   757 
 Variabel   5   16 
\end{filecontents} 

\documentclass[ngerman, listof=totoc, index=totoc,  bibliography=totocnumbered, twoside, ]{scrartcl} %draft 
\usepackage{babel} 
\usepackage[utf8]{inputenc}
%\usepackage{here} 
\usepackage{pgfplots}% lädt auch graphicx
\usetikzlibrary{patterns} 
\pgfplotsset{ 
    compat=1.12, % die aktuelle Version ist 1.14
    /pgf/number format/use comma,
    messung/.style={
      draw = blue,
      fill = blue!30!white, 
      error bars/y dir=both, 
      error bars/y explicit, 
      error bars/error mark=triangle*, 
      error bars/error bar style={color=black}
    },
    rechenzeit/.style={
      draw = red, 
      fill=white, 
      postaction={pattern=north east lines,pattern color=red!30!white}, 
      error bars/y dir=both, 
      error bars/y explicit, 
      error bars/error mark=triangle*, 
      error bars/error bar style={color=black}
    }
} 
\begin{document} 

\begin{center}
  \begin{minipage}{\linewidth}
    \centering 
    \begin{tikzpicture}
      \pgfplotsset{
        scale only axis,
        width=0.75\linewidth,
        height=8cm,
        ybar=10pt,
        /pgf/bar width = 10pt,
        xticklabels from table={RTM_Ref_Time.txt}{Name},
        xtick=data,
        enlarge x limits=0.25, 
        legend pos= north west,
        legend cell align=right,
        anchor=current axis.north west
      }
      \begin{axis}[ 
        ymax=200, 
        ymin=0, 
        ylabel={Fließfrontfortschritt [mm]},
        ylabel style={shift={(2cm,1ex)}},
        ytick={0,20,...,180},
        ymajorgrids=true,
        axis x line=none,
        axis y line*=left
      ] 
  %-------------------------- linker Datensatz --------------------------------    
        \addplot[
            messung,
            /pgf/bar shift=0pt,
            forget plot
          ]
          table[ 
            x=x, 
            y=Messung, 
            y error=StdMessung, 
            skip coords between index={1}{100},
          ]{RTM_Ref_Pos.txt}
        ; 
        \addplot[messung]
          table[ 
            x=x, 
            y=Messung, 
            y error=StdMessung, 
            skip coords between index={0}{1},
          ]{RTM_Ref_Pos.txt}; 
  %-----------------------------Platzhalter ---------------------------------- 
      \addplot[rechenzeit]table[x=x,y expr=0,
          skip coords between index={0}{1}
        ]{RTM_Ref_Pos.txt}; 
  %---------------------------------------------------------------------------- 
      \end{axis} 
  %------------------------------ Beginn rechte Balken--------------------------    
      \begin{axis}[ 
          ymax=20, 
          ymin=0, 
          ytick={0,2,...,18},
          ylabel={Rechenzeit [min]},
          ylabel style={shift={(2cm,-1ex)}},
          xlabel={Variante / Meshgröße},
          axis x line*=left,
          axis y line*=right
        ] 
  %%-----------------------------Platzhalter ------------------------------ 
        \addplot[draw=none,fill=none]table[x=x,y expr=0]{RTM_Ref_Pos.txt};
  %%--------------------------------rechter Datensatz--------------------- 
        \addplot[rechenzeit]table[x=x,y=Rechenzeit]{RTM_Ref_Time.txt};
      \end{axis}
  %--------------------------------------------------------------------------- 
      \pgfplotsset{
        anchor=current axis.south west,
        height=4cm,
      }
      \begin{axis}[
        axis x line=none,
        axis y line*=left,
        ytick={7520,7540,...,7600},
        ymin=7500,ymax=7600,
        ymajorgrids=true,
      ]
        \addplot[messung] table[x=x,y expr=7500]{RTM_Ref_Pos.txt};
      \end{axis}
      \begin{axis}[
          axis x line*=top,
          axis y line*=right,
          ytick={752,754,...,760},
          ymin=750,ymax=760,
          xticklabel=\empty
        ]
        \addplot[messung]table[x=x,y expr=750]{RTM_Ref_Pos.txt};
        \addlegendentry{Fließfrontposition};
        \addplot[rechenzeit]table[x=x,y=Rechenzeit]{RTM_Ref_Time.txt};
        \addlegendentry{Rechenzeit};
      \end{axis}
      \fill[white]
        ([shift={(-.2,.2)}]current axis.south west)
        rectangle
        ([shift={(.2,-.2)}]current axis.south east)
      ;
    \end{tikzpicture} 
    \captionof{figure}{Fliessfrontfortschritt der VARI-Referenzproben} 
    \label{fig.:FF-RTM-REF} 
  \end{minipage}
\end{center}
\end{document} 
Ergebnis:


Bild
Dateianhänge
gl_splitbarplot.png
gl_splitbarplot.png (37.13 KiB) 1859 mal betrachtet

Unterbrochene Y-Ache bei zwei Balkenplots

von Grigi » Fr 5. Mai 2017, 19:04

Hallöchen an die LaTeX-Gemeinde,

ich bin gerade dabei zwei unterschiedliche Balkendiagrammsätze in einen Plot zu fassen. Soweit hat das auch schon (mit dem ein oder anderen Workaround) geklappt.
Jetzt soll aber eine Achse unterbrochen werden, um einen besonders hohen Wert abbilden zu können.
Hier mal eben meinen Code:
\begin{filecontents}{RTM_Ref_Pos.txt}
Name	x	Messung	StdMessung nix
{ }	1	109	18	0
{ }	2	109	nan	0
{ }	3	110	nan	0
{ }	4	110	nan	0
{ }	5	108	nan	0
\end{filecontents}
\begin{filecontents}{RTM_Ref_Time.txt}
Name		x	Rechenzeit
Messung		1	nan
Grob		2	1
Mittel		3	5
Fein		4	757
Variabel	5	16
\end{filecontents}


\documentclass[ngerman, listof=totoc, index=totoc,  bibliography=totocnumbered, twoside, ]{scrartcl} %draft
\usepackage{babel}
\usepackage{graphicx}
\usepackage{here}
\usepackage{pgfplots} 
\usetikzlibrary{patterns}
\pgfplotsset{ 
	compat=1.12, 
	/pgf/number format/use comma 
}
\begin{document}

\begin{figure}[H] %\label{fig.:FF-RTM-REF} 
   \centering
   \begin{tikzpicture} 
   \begin{axis}[ 
   ybar=10pt,  %configures bar shift 
   bar width = 10pt,
   ymax=240,
   ymin=0,
   enlarge x limits=0.25,
   ylabel={Fließfrontfortschritt [mm]},
   width=0.9\linewidth, %  regelt die BREITE
   height=10cm, % regelt die HÖHE
   ytick={0,20,...,240},
   xticklabels from table={RTM_Ref_Pos.txt}{Name},       
   xtick=data, 
   ticklabel style={/pgf/number format/.cd, use comma, 1000 sep = {}}, 
   ymajorgrids=true, 
   legend pos= north west,% Legende oben links in Abb. 
   legend cell align=right% Rechtsbündige Ausrichtung der Legende 
   ]
%-------------------------- linker Datensatz --------------------------------   
   \addplot 
   [draw = blue, 
   fill = blue!30!white, 
   error bars/.cd, 
   y dir=both, 
   y explicit, 
   error mark=triangle*, 
   error bar style={color=black}]   
   table[ 
   x=x, 
   y=Messung, 
   y error=StdMessung, 
   visualization depends on=\thisrow{StdMessung} \as \myshift, 
   ]       
   {RTM_Ref_Pos.txt}; 
   \addlegendentry{Fließfrontposition}; 
%-----------------------------Platzhalter ----------------------------------
   \addplot 
   [draw = red, 
   fill=white, 
   postaction={pattern=north east lines,pattern color=red!30!white}, 
   error bars/.cd, 
   y dir=both, 
   y explicit, 
   error mark=triangle*, 
   error bar style={color=black}]   
   table[ 
   x=x, 
   y=nix, 
   ]       
   {RTM_Ref_Pos.txt}; 
   \addlegendentry{Rechenzeit}; 
%----------------------------------------------------------------------------
   \end{axis} 
%------------------------------ Beginn rechte Balken--------------------------   
   \begin{axis}[ 
   ybar=15pt,  %configures bar shift 
   bar width = 10pt,
   yticklabel pos=right,
   ymax=24,
   ymin=0,
   ytick={0,2,...,24},
   enlarge x limits=0.25,
   ylabel={Rechenzeit [min]},
   xlabel={Variante / Meshgröße},
   width=0.9\linewidth, %  regelt die BREITE
   height=10cm, % regelt die HÖHE
   xticklabels from table={RTM_Ref_Time.txt}{Name},       
   xtick=data, 
   ticklabel style={/pgf/number format/.cd, use comma, 1000 sep = {}}, 
   ymajorgrids=false, 
   legend pos= north east,% Legende oben links in Abb. 
   legend cell align=right% Rechtsbündige Ausrichtung der Legende    
   ]
%-----------------------------Platzhalter ------------------------------
   \addplot 
   [draw = blue, 
   fill = blue!30!white, 
   error bars/.cd, 
   y dir=both, 
   y explicit, 
   error mark=triangle*, 
   error bar style={color=black}]   
   table[ 
   x=x,
   y=nix, 
   ]       
   {RTM_Ref_Pos.txt};    
%----------------------------------------------------------------------
   
%--------------------------------rechter Datensatz---------------------
   \addplot 
   [draw = red, 
   fill=white, 
   postaction={pattern=north east lines,pattern color=red!30!white}, 
   error bars/.cd, 
   y dir=both, 
   y explicit, 
   error mark=triangle*, 
   error bar style={color=black}]   
   table[ 
   x=x, 
   y=Rechenzeit, 
   ]       
   {RTM_Ref_Time.txt};          
   \end{axis}       
%---------------------------------------------------------------------------
   
   \end{tikzpicture}
   \caption{Fliessfrontfortschritt der VARI-Referenzproben}
   \label{fig.:FF-RTM-REF} 
\end{figure}
\end{document}
Das ganze sieht dann so aus, wie im Anhang. Der höchste Wert, also jener welcher aus dem Diagramm ragt, liegt übrigens bei über 750. Kennt ihr eine Möglichkeit, die rechte Achse so zu unterbrechen, dass sie beispielsweise bei 19min bricht und dann mit 700 -> 750 -> 800 endet?

Da ich mittlerweile nicht mehr weiter weiß, hoffe ich echt auf eure Hilfe. :(

Beste Grüße,
Grigi

PS: Ein nettes Gimmick wäre es, wenn die "Messung" in die Mitte der Sektion rutscht :)

Edit: Minimalbeispiel angepasst
Dateianhänge
Aktueller Stand
Aktueller Stand
Screenshot 2017-05-05 18.55.04.png (45.86 KiB) 1883 mal betrachtet

Nach oben