Kombinieren von Gruppendiagrammen mit Diskontinuitätsachsen zum Ändern des Maßstabs

Kombinieren von Gruppendiagrammen mit Diskontinuitätsachsen zum Ändern des Maßstabs

ich möchte ein nicht kontinuierliches Diagramm erstellen, bei dem es möglich ist, von 10 % auf z. B. 50 % zu „springen“, ohne eine kontinuierliche Skalierung. Ich denke, ich habe den größten Teil der Lösung selbst gefunden und werde sie unten veröffentlichen. Das „Problem“ besteht darin, dass ich die erste Diagrammgruppe nicht als ymin=0,ymax=6,und die zweite Gruppe als definieren kann ymin=45,ymax=80,. Wenn ich den ersten Bereich definiere, verschiebt dies diesen Teil des Diagramms ganz nach rechts und einen Teil davon aus dem Diagramm heraus (und ich verstehe nicht, warum). Siehe dieses Bild:Bildbeschreibung hier eingeben Wenn ich den zweiten Bereich definiere, „verschwindet“ die Darstellung einfach und in diesem Teil des Dokuments bleibt nur ein weißer Bereich übrig.

Aktuell sieht das so aus: Bildbeschreibung hier eingeben Das ist ungefähr das, was ich zeigen möchte, außer dass ich im „unteren Teil“ rechts im Diagramm nur 4 Balken mit der „gleichen“ Höhe haben möchte, da sie sich im oberen Teil unterscheiden, und im linken unteren Teil soll es möglich sein, tatsächlich unterschiedliche Höhen der Balken zu sehen und nicht wie das aktuelle Aussehen. Natürlich sollten im oberen Teil die linken Balken nicht angezeigt werden, da sie zu kleine Werte haben.

Ich hoffe, Sie können mir bei diesem Problem helfen

\documentclass{ifacconf}   
\usepackage[round]{natbib} 
\usepackage{graphicx}      
\usepackage{pgfplots}  
\usetikzlibrary{pgfplots.groupplots} 
\usepackage{tikz-timing} 
\usepackage{listings} 
\usepackage{xcolor} 
\definecolor{ForestGreen}{RGB}{34,139,34} 
\definecolor{Gold}{RGB}{218,165,32} 
\definecolor{MediumBlue}{RGB}{25,25,205} 
\usepackage{capt-of} 
\begin{document} 
\pgfplotsset{ 
    every non boxed x axis/.style={}  
    } 
\begin{tikzpicture} 
\begin{groupplot}[
    group style={
        group name=my fancy plots,
        group size=1 by 2,
        xticklabels at=edge bottom,
        vertical sep=0pt
    },
    width=9.5cm,      ybar, 
      enlarge 
      x limits=0.5,
      %ylabel={\#participants}, 
      symbolic x coords={\# Variables (\%),Pipeline Utilization (\%)}, %efficiency
      xtick=data, 
      %nodes near coords,
      %nodes near coords align={vertical}, 
      %every node near coord/.append style={font=\small},
      legend style={at={(0.25,0.69)},anchor=south, cells={align=left}}, ]

\nextgroupplot[%ymin=45,ymax=80,
               ytick={60,80},
               axis x line=top, 
               axis y discontinuity=crunch,
               ybar, 
               bar width=.68cm,
               nodes near coords,
               nodes near coords align={vertical}, 
               every node near coord/.append style={font=\small},
               height=4.5cm]

      \addplot [color=purple, fill = purple,]coordinates {(\# Variables (\%),5.14) (Pipeline Utilization (\%),62.05)}; 
      \addplot [color=orange, fill = orange,]coordinates {(\# Variables (\%),4.91) (Pipeline Utilization (\%),63.53)}; 
      \addplot [color=ForestGreen, fill = ForestGreen,]coordinates {(\# Variables (\%),0.27) (Pipeline Utilization (\%),65.51)}; 
      \addplot [color=MediumBlue, fill = MediumBlue,]coordinates {(\# Variables (\%),0.33) (Pipeline Utilization (\%),66.75)};        

\nextgroupplot[%ymin=0,ymax=6,
               ytick={0},
               axis x line=bottom,
               ybar, 
               bar width=.68cm,
               height=2.0cm]

      \addplot [color=purple, fill = purple,]coordinates {(\# Variables (\%),5.14) (Pipeline Utilization (\%),62.05)}; 
      \addplot [color=orange, fill = orange,]coordinates {(\# Variables (\%),4.91) (Pipeline Utilization (\%),63.53)}; 
      \addplot [color=ForestGreen, fill = ForestGreen,]coordinates {(\# Variables (\%),0.27) (Pipeline Utilization (\%),65.51)}; 
      \addplot [color=MediumBlue, fill = MediumBlue,]coordinates {(\# Variables (\%),0.33) (Pipeline Utilization (\%),66.75)};               
\end{groupplot} 
\end{tikzpicture} 
\end{document}

Antwort1

Ich denke, Ihr Ansatz ist besser für Liniendiagramme geeignet, aber nicht für Säulen.

Sie könnten zwei Achsen mit unterschiedlichen Maßstäben verwenden:

\documentclass{article}   
\usepackage[round]{natbib} 
\usepackage{graphicx}      
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\usetikzlibrary{pgfplots.groupplots} 
\usepackage{tikz-timing} 
\usepackage{listings} 
\usepackage{xcolor} 
\definecolor{ForestGreen}{RGB}{34,139,34} 
\definecolor{Gold}{RGB}{218,165,32} 
\definecolor{MediumBlue}{RGB}{25,25,205} 
\usepackage{capt-of} 
\begin{document} 

\begin{tikzpicture} 
\pgfplotsset{
      width=95mm,
      axis x line=box,
      axis y discontinuity=crunch,
      ybar, 
      xmin=0,xmax=1,
      xtick={0,1},
      xticklabels={\# Variables (\%),Pipeline Utilization (\%)}, 
      enlarge x limits=.5,
}

\begin{axis}[%
      ymin=45, ymax=80,
      height=45mm,
      bar width=.68cm,
      ytick={60,80},
      nodes near coords,
      nodes near coords align={vertical}, 
      every node near coord/.append style={font=\small}]

      \addplot [color=purple, fill = purple,] coordinates {(1,62.05)}; 
      \addplot [color=orange, fill = orange,] coordinates {(1,63.53)}; 
      \addplot [color=ForestGreen, fill = ForestGreen,] coordinates {(1,65.51)}; 
      \addplot [color=MediumBlue, fill = MediumBlue,] coordinates {(1,66.75)}; 
\end{axis}

\begin{axis}[%
      ymin=0, ymax=6,
      height=20mm,
      bar width=.68cm,
      ytick={0},
      axis line style={draw=none},
      xticklabels={,},
      nodes near coords,
      nodes near coords align={vertical}, 
      every node near coord/.append style={font=\small}]

      \addplot [color=purple, fill = purple,]coordinates {(0,5.14)}; 
      \addplot [color=orange, fill = orange,]coordinates {(0,4.91)}; 
      \addplot [color=ForestGreen, fill = ForestGreen,]coordinates {(0,0.27)}; 
      \addplot [color=MediumBlue, fill = MediumBlue,]coordinates {(0,0.33)}; 
\end{axis}

\end{tikzpicture} 
\end{document}

Bildbeschreibung hier eingeben


Bearbeiten:Es ist derzeit nicht möglich, den Diskontinuitäts-Crunch mit Optionen zu verschieben pgfplots. Außerdem scheint es ein Problem zu geben, wenn Dekorationen auf Achsen angewendet werden, insbesondere bei Verwendung von pre lengthund post length, wie dokumentiertHier. Trotzdem habe ich es geschafft, einen benutzerdefinierten Diskontinuitäts-Crunch zu zeichnen, indem ich eine Pfad-ersetzende Dekoration verwendet habe, die die Achsen ersetzt. Leider scheint es, dass Sie axis x line=boxdiese Lösung nicht verwenden können.

\documentclass{article}   
\usepackage{pgfplots}
\usetikzlibrary{decorations.pathreplacing}
\pgfplotsset{compat=1.14}
\usepackage{xcolor}
\definecolor{ForestGreen}{RGB}{34,139,34} 
\definecolor{Gold}{RGB}{218,165,32} 
\definecolor{MediumBlue}{RGB}{25,25,205} 

\begin{document} 

\begin{tikzpicture}[discontinuity/.style={decoration={show path construction,lineto code={%
        \path (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast) coordinate[pos=.3] (mid);%
        \draw (\tikzinputsegmentfirst) -- ([yshift=-6pt]mid) -- ++(-3pt,3pt) -- ++(6pt,3pt) -- ++(-3pt,3pt) -- (\tikzinputsegmentlast);%
      }}}]

\pgfplotsset{
      width=95mm,
      axis x line=bottom,
      %axis y discontinuity=crunch,
      ybar, 
      xmin=0,xmax=1,
      xtick={0,1},
      xticklabels={\# Variables (\%),Pipeline Utilization (\%)}, 
      enlarge x limits=.5,
}

\begin{axis}[%
      ymin=45, ymax=80,
      height=45mm,
      bar width=.68cm,
      ytick={60,80},
      nodes near coords,
      nodes near coords align={vertical}, 
      every node near coord/.append style={font=\small},
      every outer y axis line/.append style={discontinuity}
      ]

      \addplot [color=purple, fill = purple,] coordinates {(1,62.05)}; 
      \addplot [color=orange, fill = orange,] coordinates {(1,63.53)}; 
      \addplot [color=ForestGreen, fill = ForestGreen,] coordinates {(1,65.51)}; 
      \addplot [color=MediumBlue, fill = MediumBlue,] coordinates {(1,66.75)}; 
\end{axis}

\begin{axis}[%
      ymin=0, ymax=6,
      height=20mm,
      bar width=.68cm,
      ytick={0},
      axis line style={draw=none},
      tick style={draw=none},
      xticklabels={,},
      nodes near coords,
      nodes near coords align={vertical}, 
      every node near coord/.append style={font=\small}
      ]

      \addplot [color=purple, fill = purple,]coordinates {(0,5.14)}; 
      \addplot [color=orange, fill = orange,]coordinates {(0,4.91)}; 
      \addplot [color=ForestGreen, fill = ForestGreen,]coordinates {(0,0.27)}; 
      \addplot [color=MediumBlue, fill = MediumBlue,]coordinates {(0,0.33)}; 
\end{axis}

\end{tikzpicture} 
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen