箱ひげ図のスケーリング

箱ひげ図のスケーリング
\documentclass{article}
\usepackage{graphicx} % Required for inserting images
\usepackage{subcaption}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\usepgfplotslibrary{statistics}

\begin{document}

\begin{tikzpicture}
  \begin{axis}
    [
    ytick={1,2,3},
    yticklabels={PT,RP-T,P-T},
    % xticklabels={1,2,3,4,5,6,7,a},
    ]
    \addplot+[
    boxplot prepared={
      median=-0.052077,
      upper quartile=1.627744,
      lower quartile=-1.613357,
      upper whisker=9.878565,
      lower whisker=-8.484539
    },
    ] coordinates {};
    \addplot+[
    boxplot prepared={
      median=0.893359,
      upper quartile=32.047894,
      lower quartile=-29.725945,
      upper whisker=219.879028,
      lower whisker=-242.360413
    },
    ] coordinates {};
    \addplot+[
    boxplot prepared={
      median=357.228912,
      upper quartile=32866.879883,
      lower quartile=-31571.360840,
      upper whisker=149471.640625,
      lower whisker=-147415.8125
    },
    ] coordinates {};
  \end{axis}
\end{tikzpicture}

\end{document}

ここに画像の説明を入力してください

データ範囲ごとにうまく見せたいのですが、各データ範囲のギャップが大きすぎて、2つの箱ひげ図がただのベタにしか見えません。データ範囲を小さくして、スケール上の指数表記に置き換えてみたのですが、表現するグラフの範囲が狭くて不格好でした。何かいい方法はないでしょうか?

答え1

なぜならここでは対数スケールに切り替えることはできません。以下に示すように、何らかの分割描画を行うことをお勧めします。備考:

  • モノリシック軸を3つの個別の軸にコピーしました
  • それぞれをscope(配置用など)に入れてください
  • それぞれに幅と高さを割り当てた
  • 何らかの拡大を示すために線や矢印を付ける

がある素敵な写真を撮るために、まだやるべきことがいくつか残っています。

  • より良い最小値/最大値を選択し、すべての「0」が中央に揃うようにします。
  • 描画を簡素化するために、各スコープにグローバル名を割り当てる方法を見つけます。たとえば\draw (A.south) -- (B.north west);、(A) が最初のスコープ、(B) が 2 番目のスコープです。

最終提案: この図面をクラスで作成しstandalone、パッケージを使用してgraphicx、選択したドキュメントクラスに上記の PDF を画像として含めます。

結果

\documentclass{article}
%\usepackage{graphicx} % Required for inserting images
%\usepackage{subcaption}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\usepgfplotslibrary{statistics}
\usetikzlibrary{arrows.meta}

\begin{document}

\begin{tikzpicture}[
    >={Stealth},
    ind/.style={->, teal!50},
]
% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 \begin{scope}
  \begin{axis}
    [
        ytick={1},
        yticklabels={PT},
        % xticklabels={1,2,3,4,5,6,7,a},
        height=4cm, width=10cm,
    ]
    \addplot+[
        boxplot prepared={
          median=357.228912,
          upper quartile=32866.879883,
          lower quartile=-31571.360840,
          upper whisker=149471.640625,
          lower whisker=-147415.8125
    },
    ] coordinates {};
  \end{axis} 
 \end{scope}
 
 % ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 \begin{scope}[yshift=-4cm]
  \begin{axis}
    [
        ytick={1},
        yticklabels={RP-T},
        % xticklabels={1,2,3,4,5,6,7,a},
        height=4cm, width=10cm,
    ]
    \addplot+[
    boxplot prepared={
      median=0.893359,
      upper quartile=32.047894,
      lower quartile=-29.725945,
      upper whisker=219.879028,
      lower whisker=-242.360413
    },
    ] coordinates {};
  \end{axis} 
 \end{scope}
 
 % ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 \begin{scope}[yshift=-8cm]
  \begin{axis}
    [
        ytick={1},
        yticklabels={P-T},
        % xticklabels={1,2,3,4,5,6,7,a},
        height=4cm, width=10cm,
    ]
    \addplot+[
    boxplot prepared={
      median=-0.052077,
      upper quartile=1.627744,
      lower quartile=-1.613357,
      upper whisker=9.878565,
      lower whisker=-8.484539
    },
    ] coordinates {};
  \end{axis} 
 \end{scope}
  
  % ~~~ drawing some lines ~~~~~~~~~~~~
  \draw[ind] (4.2,- .5) -- (0,-1.5);
  \draw[ind] (4.2,-4.5) -- (0,-5.5);
  
  \draw[ind] (4.3,- .5) -- (8.5,-1.5);
  \draw[ind] (4.5,-4.5) -- (8.5,-5.5);
  
\end{tikzpicture}

\end{document}

関連情報