フレーム、スライダー、軸を使用せずに、マニピュレートから画像を抽出するにはどうすればよいですか?

Dec 09 2020

Manipulateスライダーを使用しているからいくつかの写真を抽出したいのですが、ポップアップメニューから抽出すると、すべてのフレームとスライダーが表示されます。特定のスライダー値(たとえば、PNGに)をエクスポートするにはどうすればよいですか?$k = 0.5$、以下の例の場合)、フレーム、スライダーを操作せずに、さらに軸と目盛りを付けずに?

そしておそらくもっとトリッキーです:マニピュレートが示すよりも高い解像度でグラフィックを抽出するにはどうすればよいですか?(たとえば、以下の600の低解像度ではなく、PNG形式で1024 x 1024ピクセル)。

これが、遊ぶためのセミクールなMWEです。

Manipulate[
 ContourPlot[
  Cos[x + y] Sin[k x - 3 y],
  {x, -2, 2},
  {y, -2, 2},
  PlotPoints -> 20,
  PlotRange -> {{-2, 2}, {-2, 2}},
  Axes -> True,
  AxesOrigin -> {0, 0},
  AxesStyle -> Directive[GrayLevel[0.5]],
  AxesLabel -> {
    Style["X",  Bold, 14],
    Style["Y",  Bold, 14]
    },
  ColorFunction -> "Rainbow",
  ContourStyle -> Black,
  Contours -> Automatic,
  ImageSize -> 600
  ],
 {
  k, -5, 5, 0.1,
  ImageSize -> Large,
  Appearance -> {"Labeled", "Closed"},
  AppearanceElements -> {"InputField", "Slider"}
  },
 ControlPlacement -> Bottom,
 FrameMargins -> None,
 FrameLabel ->  {None, None, 
   Style["Some Funny Title", Bold, 14, FontFamily -> "Helvetica"]}
 ]

回答

7 MassDefect Dec 09 2020 at 03:15
Manipulate[
  plt = ContourPlot[
    Cos[x + y] Sin[k x - 3 y], 
    {x, -2, 2}, {y, -2, 2}, 
    PlotPoints -> 20, 
    PlotRange -> {{-2, 2}, {-2, 2}}, 
    Axes -> True, 
    AxesOrigin -> {0, 0}, 
    AxesStyle -> Directive[GrayLevel[0.5]], 
    AxesLabel -> {Style["X", Bold, 14], Style["Y", Bold, 14]}, 
    ColorFunction -> "Rainbow", 
    ContourStyle -> Black, 
    Contours -> Automatic, ImageSize -> 600
  ], 
  {k, -5, 5, 0.1, ImageSize -> Large, Appearance -> {"Labeled", "Closed"}, AppearanceElements -> {"InputField", "Slider"}}, 
  ControlPlacement -> Bottom, 
  FrameMargins -> None, 
  FrameLabel -> {None, None, Style["Some Funny Title", Bold, 14, FontFamily -> "Helvetica"]}
]

Export["~/Desktop/test.png", plt, ImageSize -> {1024, 1024}]

            (* or *)

Export["~/Desktop/test.png", plt, ImageResolution -> 300]

            (* EDIT *)

Export["~/Desktop/test.png", plt[[1]]//Graphics, ImageSize -> {1024, 1024}]

これにより、スライダー設定によって生成されたフレームがplt。という変数に保存されます。スライダーが変わるたびに、pltが更新されます。次に、Exportさまざまなパラメーターをより簡単に制御できるように、通常はコマンドを使用します。少し余談ですが、私が非常に気に入っているエクスポートパラメータの1つはBackground -> Noneです。ここではあまり関係ありませんが、背景のないPNG画像をエクスポートできます。グラフィックが背景と十分なコントラストを持っている場合、ポスターやプレゼンテーションに追加するときは本当に滑らかに見えます。

グラフィックスフォームだけを取得するために、ContourPlot@ andre314の最初の要素を取得して、それをグラフィックスに変換する方法を使用pltしましたplt[[1]]//Graphics

上記のコードの結果は次のとおりImageSize -> {1024, 1024}です。

上記の最終的なエクスポートステートメントの結果は次のとおりです。

7 andre314 Dec 09 2020 at 03:19

編集

私は最初の答えよりも単純なものを見つけました:

Settingマニピュレートに適用して、通常のグラフィックを取得します。

次に、このグラフィックのすべてのオプションを削除するには、最初の部分を取得して再適用する方法があります Graphic

編集終了

古い答え

操作でスナップショット機能を使用できます。

次いでremplaceDynamicModuleによってWith(これは必要ではないかもしれないが)、
これの評価は正常を与えますGraphics。このグラフィックのすべてのオプションを削除するには、1つの方法は、最初の部分を取得して再適用することです。Graphic