如何使用LevelScheme在Mathematica中创建子图?

5 wolfram-mathematica levelscheme

考虑以下在MATLAB中生成的任意图形作为示例.基本的想法是我有一个等高线图,我想在右边的子图中展示它的选定切片.在mma中是否有等效的子图?

我现在所做的工作就是将切片和箭头以及两个切片图分别绘制成轮廓图,然后将它们放在胶乳中.但是,我希望能够在mma中做到这一点.我该怎么做呢?

我的想法是生成一个具有完整垂直和半水平纵横比的等高线图,这两个图具有半垂直和半水平纵横比,然后用于GraphicsGrid对齐它们.但这仍然给了我作为列表的情节,而不是复合数字.这是唯一的方式还是有更好,更优雅的方式呢?

在此输入图像描述

Sim*_*mon 7

我知道MultipanelLevelScheme中可能会让你做你想做的事 - 但我没有太多的经验,而且文档中的例子相当稀疏.我已经将其中一个例子粘贴到这个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]}]]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


编辑:

这是使用相同的东西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}
 ]
Run Code Online (Sandbox Code Playgroud)

心计

  • @ d'o-o'b,LevelScheme非常适合这类事情.但是要注意的一件事是,它是非常程序化的,每个语句都会影响之后但不是之前的语句.例如,`FigurePanel [{...}]`声明以下图形在该特定面板内,并且一直保持到下一个`FigurePanel`.需要一些时间来习惯它,但你可以使用它轻松制作出版品质的图形.另外,查看其刻度标记界面,比默认设置更加理智. (2认同)