15

グリッド全体が単一の FrameLabel を持つ、プロットの行/列/グリッドを作成する最も簡単な方法は何ですか?

これに似たものが必要です:

p := ListPlot[RandomInteger[10, 5], Joined -> True, Axes -> False, 
  Frame -> True, PlotRange -> {0, 11}, 
  FrameLabel -> {"horizontal", None}, AspectRatio -> 1]

GraphicsRow[{Show[p, FrameLabel -> {"horizontal", "vertical"}], p, p}]

行形式の場合、1 つまたは複数の水平ラベルを持つことができますが、垂直ラベルは 1 つだけです。

考慮すべき問題:

  • 垂直スケールはすべてのプロットで一致する必要があり、長すぎるラベルや自動などによって台無しにされてはなりませんPlotRangePadding
  • プロット間の間隔を適切に (そしてサイズ変更に寛容に!) 制御する必要があります (結局のところ、これは冗長なラベルを削除する動機の 1 つです)。
  • 配置の一般的なスペース効率。最大のコンテンツ、最小の (不必要な) 空白。

編集

多くのサイズ変更を伴う、印刷可能な図を確実に作成できるようにしようとしています。(エクスポートされた PDF は通常、ノートブックに表示されているものと同じ比率ではなく、読みやすいが大きすぎないフォントを使用する必要があるため)

4

3 に答える 3

17

LevelSchemeを使用して、目的を達成できます。次に例を示します。

<< "LevelScheme`"
Figure[{
  Multipanel[{{0, 1}, {0, 1}}, {1, 3},
   XFrameLabels -> textit["x"], BufferB -> 3,
   YFrameLabels -> textit["Sinc(x)"], BufferL -> 3,
   TickFontSize -> 9,
   XGapSizes -> {0.1, 0.1},
   PanelLetterCorner -> {1, 1}
   ],
  FigurePanel[{1, 1}, PlotRange -> {{-1.6, -0.6}, {-0.5, 1}}],
  RawGraphics[Plot[Sinc[20 x], {x, -1.6, -0.6}]],

  FigurePanel[{1, 2}, PlotRange -> {{-0.5, 0.5}, {-0.5, 1}}],
  RawGraphics[Plot[Sinc[20 x], {x, -0.5, 0.5}]],

  FigurePanel[{1, 3}, PlotRange -> {{0.6, 1.6}, {-0.5, 1}}],
  RawGraphics[Plot[Sinc[20 x], {x, 0.6, 1.6}]]
  },
 PlotRange -> {{-0.1, 1.02}, {-0.12, 1.095}}]

ここに画像の説明を入力

LevelScheme は、プロットの配置に大きな柔軟性を提供します。

  • プロットに共通のラベルを付けて名前を付ける代わりに、定義を 内に移動して、FigurePanel[]それぞれのラベルを個別に制御できます。
  • X 方向と Y 方向の両方でプロット間の間隔を設定し、各パネルのサイズを変更することもできます。 .
  • 個々のプロット範囲を設定したり、それぞれのフレーム ティック ラベルを変更したり、パネルのどちら側 (上/下/左/右) にラベルを付けるかを制御したり、パネル番号を変更したりできます。

唯一の欠点は、場合によってはそれに取り組まなければならないことですが、一般的に、私はそれを使用するのが楽しいと感じました.

編集

あなたの例に似たものを次に示します。

Figure[{
  Multipanel[{{0, 1}, {0, 1}}, {1, 3},
   YFrameLabels -> textit["Vertical"], BufferL -> 3,
   TickFontSize -> 9,
   XGapSizes -> {0.1, 0.1},
   PanelLetterCorner -> {1, 1}
   ],
  FigurePanel[{1, 1}, PlotRange -> {{1, 10}, {0, 10}}],
  RawGraphics[ListLinePlot[RandomInteger[10, 10]]],

  FigurePanel[{1, 2}, PlotRange -> {{1, 10}, {0, 10}},
   LabB -> textit["Horizontal"], BufferB -> 3],
  RawGraphics[ListLinePlot[RandomInteger[10, 10]]],

  FigurePanel[{1, 3}, PlotRange -> {{1, 10}, {0, 10}}],
  RawGraphics[ListLinePlot[RandomInteger[10, 10]]]
  },
 PlotRange -> {{-0.1, 1.02}, {-0.2, 1.095}}]

ここに画像の説明を入力

編集2

Mr. Wizard のコメントに答えるために、ここに2x3グリッド用の空白のテンプレートがあります

Figure[{Multipanel[{{0, 1}, {0, 1}}, {2, 3},
   XFrameTicks -> None,
   YFrameTicks -> None,
   XGapSizes -> {0.1, 0.1},
   YGapSizes -> {0.1}],
  FigurePanel[{1, 1}],
  FigurePanel[{1, 2}],
  FigurePanel[{1, 3}],
  FigurePanel[{2, 1}],
  FigurePanel[{2, 2}],
  FigurePanel[{2, 3}]
  }, PlotRange -> {{-0.01, 1.01}, {-0.01, 1.01}}]    

ここに画像の説明を入力

そして、これは拡張パネルを備えたものです

Figure[{Multipanel[{{0, 1}, {0, 1}}, {2, 3},
   XFrameTicks -> None,
   YFrameTicks -> None,
   XGapSizes -> {0.1, 0.1},
   YGapSizes -> {0.1}],
  FigurePanel[{1, 1}, PanelAdjustments -> {{0, 0}, {1.1, 0}}],
  FigurePanel[{1, 2}],
  FigurePanel[{1, 3}],
  FigurePanel[{2, 2}, PanelAdjustments -> {{0, 1.1}, {0, 0}}]
  }, PlotRange -> {{-0.01, 1.01}, {-0.01, 1.01}}]

ここに画像の説明を入力

于 2011-04-28T15:09:53.113 に答える
9

を使用して、複数の水平ラベルを処理する方法を既に知っていますListPlot。を使用して単一のラベルを取得できますPanel。例えば...

p := ListPlot[RandomInteger[10, 5], Joined -> True, Axes -> False, 
Frame -> True, PlotRange -> {0, 11}, AspectRatio -> 1]

Panel[GraphicsRow[{p, p, p}], {"horizontal",Rotate["vertical", Pi/2]}, 
      {Bottom, Left}, Background -> White]

三連祭壇画

Topオプションで、とRightエッジにもラベルを含めることができます。

于 2011-04-28T14:56:41.767 に答える
3

これが私がまとめた1つのオプションです。その利点は、それが単純であることです。

グリッドに対しても同様に実行できると仮定すると、yoda の LevelScheme プロットの外観の方が気に入っています。

p := ListPlot[RandomInteger[10, 5], Joined -> True, Axes -> False, 
  Frame -> True, PlotRange -> {0, 11}, AspectRatio -> 1]

gg = GraphicsGrid[{{p, p, p}, {p, p, p}, Graphics /@ Text /@ {"Left", "Center", "Right"}},
       Spacings -> 5, ItemAspectRatio -> {{1, 1, 0.15}}];

Labeled[gg, Rotate["vertical", Pi/2], Left]

ここに画像の説明を入力

于 2011-04-28T23:27:17.377 に答える