Как мне создать подсюжеты в Mathematica, используя LevelScheme? - PullRequest
5 голосов
/ 25 марта 2011

Рассмотрим в качестве примера следующую произвольную фигуру, сгенерированную в MATLAB.Основная идея заключается в том, что у меня есть контурный график, и я хочу показать выбранные срезы из него на вспомогательных участках справа.Есть ли эквивалент подзаговора в ММА?

Обходной путь, который у меня есть сейчас, заключается в том, чтобы иметь только контурную диаграмму с ломтиками, стрелками и двумя ломтиками отдельно, а затем соединить их вместе в латексе.Тем не менее, я хотел бы быть в состоянии сделать это в ММА.Как мне это сделать?

Идея, которая у меня возникла, заключается в том, чтобы создать контурный график с полным вертикальным и половинным горизонтальным соотношением сторон, двумя графиками с половинным вертикальным и половинным горизонтальным соотношением, а затемиспользуйте GraphicsGrid, чтобы выровнять их.Но это все же дало мне графики в виде списка, а не составной фигуры.Это единственный способ или есть более приятный и элегантный способ сделать это?

enter image description here

Ответы [ 3 ]

7 голосов
/ 25 марта 2011

Я знаю, что Multipanel в LevelScheme , вероятно, может позволить вам делать то, что вы хотите - но у меня нет большого опыта с этим, и примеры в документах довольно скудны.Я уже вставил один из примеров в этот SO-ответ , так что посмотрите и посмотрите, что вы думаете!


Вот моя попытка с 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]}]]

enter image description here


Edit:

Вот то же самое, используя 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}
 ]

scheming

4 голосов
/ 26 марта 2011

По поводу комментариев ОП о GraphicsGrid вы можете использовать FullGraphics @ GraphicsGrid @ {...} для вывода одного графического объекта. Это необходимо для получения копии в формате PDF для работы.

2 голосов
/ 25 марта 2011

Вот первый шаг к созданию динамического решения Саймона.Стрелки жестко запрограммированы для этого конкретного изображения.Позже я попытаюсь реализовать их более широко.

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}
 ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...