Как извлечь картинку из Manipulate, без рамки, ползунков и осей?

Dec 09 2020

Я хотел бы извлечь несколько изображений из Manipulateобъекта, в котором используется ползунок, но когда я делаю это из всплывающего меню, я получаю вместе с ним весь кадр и слайдер. Как мы можем экспортировать изображение (например, в PNG) для заданного значения ползунка (скажем,$k = 0.5$, для примера ниже), без рамки Manipulate, ползунка и даже без осей и отметок?

И, возможно, еще сложнее: как мы можем извлечь графику с более высоким разрешением, чем то, что показывает Manipulate? (скажем, 1024 x 1024 пикселей в формате PNG вместо более низкого разрешения 600 ниже).

Вот полукрутая 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команду, чтобы упростить управление различными параметрами. Небольшое отступление: мне очень нравится один параметр экспорта Background -> None. Здесь не очень актуально, но он позволяет экспортировать изображения PNG без фона. Очень красиво смотрится при добавлении к плакату или презентации, если графика имеет достаточный контраст с фоном.

Чтобы получить только графику из формы, ContourPlotя использовал метод @andre314, который берет первый элемент pltи превращает его в графику, а именно plt[[1]]//Graphics.

Результат приведенного выше кода с ImageSize -> {1024, 1024}:

Результат заключительного оператора экспорта сверху:

7 andre314 Dec 09 2020 at 03:19

РЕДАКТИРОВАТЬ

Я нашел что-то более простое, чем мой первый ответ:

Примените Settingк Manipulate, чтобы получить нормальную графику.

Затем, чтобы удалить все параметры этого рисунка, один из способов - взять первую часть и повторно нанести Graphic

КОНЕЦ РЕДАКТИРОВАНИЯ

СТАРЫЙ ОТВЕТ

Вы можете использовать функцию моментального снимка в файле Manipulate.

Затем заменить DynamicModuleна With(это может быть необязательно),
тогда оценка этого даст нормальный результат Graphics. Один из способов удалить все параметры этого рисунка - взять первую часть и повторно нанестиGraphic