5

例として、MATLAB で生成された次の任意の Figure を検討してください。基本的な考え方は、等高線図があり、そこから選択したスライスを右側のサブプロットに表示したいということです。mmaにサブプロットに相当するものはありますか?

私が現在行っている回避策は、スライスと矢印を含む等高線図と 2 つのスライス プロットを別々に作成し、それらをラテックスにまとめることです。ただし、mma内でこれを実行できるようにしたいです。どうすればこれを行うことができますか?

私が持っていたアイデアは、完全な垂直方向と半分の水平方向のアスペクト比を持つ等高線図、半分の垂直方向と半分の水平方向のアスペクト比を持つ 2 つのプロットを生成し、GraphicsGridそれらを整列させるために使用することです。しかし、これでもプロットは合成図ではなくリストとして表示されました。これが唯一の方法ですか、それともより適切でエレガントな方法がありますか?

ここに画像の説明を入力

4

3 に答える 3

7

LevelScheme ではMultipanel、おそらくやりたいことを実行できることはわかっていますが、これについてはあまり経験がなく、ドキュメントの例はかなりまばらです。私はすでに例の 1 つをこの SO answerに貼り付けたので、そこを見て、あなたの考えを見てください!


これが私の試みGraphicsGridです。Multipanelできるのにできないのは、さまざまなGraphicsGrid列/行のサイズを使用できるようにすることです。これは、プログラムで矢印を描画するのに苦労し、「描画ツール」パネルを使用して手動で描画することに頼ったことを意味します ( :D )

With[{yslice1 = .5, yslice2 = -.8},
 GraphicsGrid[
  {{DensityPlot[Sin[15 x y], {x, -1, 1}, {y, -1, 1}, 
     ColorFunction -> "PlumColors", AspectRatio -> 2,
     Epilog -> {Dashed, White, Line[{{-1, yslice1}, {1, yslice1}}], 
       Line[{{-1, yslice2}, {1, yslice2}}]}],
    Plot[Sin[15 x yslice1], {x, -1, 1}, Axes -> False, Frame -> True]},
   {SpanFromAbove,
    Plot[Sin[15 x yslice2], {x, -1, 1}, Axes -> False, 
     Frame -> True]}},
  Spacings -> {Scaled[0.2], Scaled[0.0]}]]

ここに画像の説明を入力


編集:

これは を使用した同じことLevelSchemeです。フレームが並んでいることに注意してください。多くの新しい矢印ディレクティブがあるため、矢印を追加できるはずですが、それLevelSchemeは宿題として残します。

<< "LevelScheme`"
{yslice1 = .5, yslice2 = -.8};
Figure[{
  SetOptions[Multipanel, 
   ShowTickLabels -> {True, False, False, True}, Background -> Wheat,
   PanelLetterFontSize -> 10, Margin -> {{40, 40}, {40, 0}}],
  Multipanel[{{0, 1}, {0, 1}}, {2, 2},
   XPlotRanges -> {-1, 1}, YPlotRanges -> {-1, 1},
   XFrameLabels -> textit["x"], YFrameLabels -> textit["y"],
   TickFontSize -> 10, XFrameTicks -> LinTicks[-1, 1, .5, 4], 
   YFrameTicks -> LinTicks[-1, 1, .5, 4],
   BufferL -> 1.5, BufferB -> 3, Order -> Vertical,
   XPanelSizes -> {1, 1}, XGapSizes -> 0.25, YGapSizes -> 0.2],
  FigurePanel[{1, 2}], 
  RawGraphics[
   Plot[Sin[15 x yslice1], {x, -1, 1}, Axes -> False, Frame -> True]],
  FigurePanel[{2, 2}], 
  RawGraphics[
   Plot[Sin[15 x yslice2], {x, -1, 1}, Axes -> False, Frame -> True]],
  FigurePanel[{2, 1}, PanelAdjustments -> {{0, 0}, {0, +1.2}}],
  RawGraphics[
   DensityPlot[Sin[15 x y], {x, -1, 1}, {y, -1, 1}, 
    ColorFunction -> "PlumColors", AspectRatio -> 2],
   Graphics[{Dashed, Thick, White, 
     Line[{{-1, yslice1}, {1, yslice1}}], 
     Line[{{-1, yslice2}, {1, yslice2}}]}]]},
 PlotRange -> {{0, 1}, {0, 1}}, ImageSize -> 2*72*{5, 3}
 ]

陰謀

于 2011-03-25T07:45:08.307 に答える
4

GraphicsGrid に関する OP のコメントについては、FullGraphics@GraphicsGrid@{...} を使用して単一のグラフィックス オブジェクトを取得できます。これは、コピーを PDF として機能させるためにも必要です。

于 2011-03-26T01:53:19.007 に答える
2

これは、Simon のソリューションを動的にするための最初のパスです。この特定の画像では、矢印がハードコードされています。後で、それらをより一般的に実装しようとします。

dp1 = DensityPlot[Sin[15 x y], {x, -1, 1}, {y, -1, 1}, 
   ColorFunction -> "PlumColors", AspectRatio -> 2, PlotPoints -> 30];
Manipulate[
 Show[
  GraphicsGrid[{{dp1 ~Append~
        (Epilog -> {Dashed, White, 
         Line[{{-1, yslice1}, {1, yslice1}}], 
         Line[{{-1, yslice2}, {1, yslice2}}]}), 
     Plot[Sin[15 x yslice1], {x, -1, 1}, Axes -> False, 
      Frame -> True]}, {SpanFromAbove, 
     Plot[Sin[15 x yslice2], {x, -1, 1}, Axes -> False, 
      Frame -> True]}}, Spacings -> {Scaled[0.2], Scaled[0.0]}],
  Graphics[{Red, {Arrowheads[Large],
     Arrow[{{380, Rescale[yslice1, {-1, 1}, {-646, -46}]}, {440, -170}}], 
     Arrow[{{380, Rescale[yslice2, {-1, 1}, {-646, -46}]}, {440, -530}}]
     }}],
  ImageSize -> 600
 ],
 {{yslice1, 0.5, "Slice 1"}, -1, 1},
 {{yslice2, -0.8, "Slice 2"}, -1, 1}
]

これは、矢印を の内側に配置する少し異なる方法で、矢印Epilogの位置を左側のプロットにリンクします。おそらく使いやすいでしょう。

dp1 = DensityPlot[Sin[15 x y], {x, -1, 1}, {y, -1, 1}, 
   ColorFunction -> "PlumColors", AspectRatio -> 2, PlotPoints -> 30, 
   PlotRangeClipping -> False, 
   ImagePadding -> {{Automatic, 100}, {Automatic, Automatic}}];
Manipulate[
 Show[
  GraphicsGrid[{{dp1~
      Append~(Epilog -> {{Dashed, White, 
          Line[{{-1, yslice1}, {1, yslice1}}], 
          Line[{{-1, yslice2}, {1, yslice2}}]}, {Red, 
          Arrowheads[Large],
          Arrow[{{1, yslice1}, {1.7, 0.88}}], 
          Arrow[{{1, yslice2}, {1.7, -0.9}}]
          }}), 
     Plot[Sin[15 x yslice1], {x, -1, 1}, Axes -> False, 
      Frame -> True]}, {SpanFromAbove, 
     Plot[Sin[15 x yslice2], {x, -1, 1}, Axes -> False, 
      Frame -> True]}}, Spacings -> {Scaled[-0.2], Scaled[0.0]}],
  ImageSize -> 600
  ],
 {{yslice1, 0.5, "Slice 1"}, -1, 1},
 {{yslice2, -0.8, "Slice 2"}, -1, 1}
 ]
于 2011-03-25T11:19:07.397 に答える