Объединение групповых графиков с осью разрыва для изменения масштаба

Объединение групповых графиков с осью разрыва для изменения масштаба

Я хочу создать не непрерывный график, где можно «прыгать» от 10% до, например, 50% без непрерывного масштабирования. Я думаю, что я сам получил большую часть решения и выложу его ниже. «Проблема» в том, что я не могу определить первую группу графика как , ymin=0,ymax=6,а вторую группу как ymin=45,ymax=80,. Когда я определяю первый диапазон, он смещает эту часть графика в самую правую сторону, а часть его за пределы графика (и я не понимаю, почему). Смотрите эту картинку:введите описание изображения здесь Когда я определяю второй диапазон, график просто «исчезает», и в этой части документа остается только белое пространство.

На данный момент это выглядит так: введите описание изображения здесь Что-то вроде того, что я хочу показать, за исключением того, что я хочу, чтобы в "нижней части" правой части графика было только 4 столбца с "одинаковой" высотой, поскольку они отличаются в верхней части и в левой нижней части, чтобы можно было увидеть разную высоту столбцов, а не как в текущем виде. Конечно, в верхней части левые столбцы не должны отображаться, поскольку у них слишком маленькие значения.

Надеюсь, вы сможете мне помочь с этой проблемой.

\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}

решение1

Я думаю, ваш подход больше подходит для линейных диаграмм, но не для столбчатых.

Вы можете использовать две оси с разными масштабами:

\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}

введите описание изображения здесь


Редактировать:В настоящее время невозможно сместить разрыв хруста с помощью pgfplotsопций. Кроме того, похоже, что существует проблема, когда украшения применяются к осям, особенно при использовании pre lengthи post length, как задокументированоздесь. Тем не менее, мне удалось нарисовать пользовательский разрывной хруст, используя pathreplaceing украшение, которое заменяет оси. К сожалению, похоже, что вы не можете использовать axis x line=boxэто решение.

\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}

введите описание изображения здесь

Связанный контент