Como extrair uma imagem de Manipular, sem moldura, controles deslizantes e eixos?

Dec 09 2020

Gostaria de extrair algumas fotos de um Manipulateque usa um controle deslizante, mas quando faço isso a partir do menu pop-up, obtenho todo o quadro e o controle deslizante com ele. Como podemos exportar a imagem (para PNG, digamos), para um determinado valor de controle deslizante (digamos$k = 0.5$, para o exemplo abaixo), sem o quadro Manipular, controle deslizante e mesmo sem os eixos e tiques?

E provavelmente mais complicado: como podemos extrair os gráficos com uma resolução maior do que o que o Manipular mostra? (digamos 1024 x 1024 pixels no formato PNG, em vez da resolução inferior de 600 abaixo).

Aqui está um MWE semi-legal para brincar:

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"]}
 ]

Respostas

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}]

Isso salva o quadro gerado pela configuração do controle deslizante em uma variável chamada plt. Cada vez que o controle deslizante muda, plté atualizado. Então, normalmente uso o Exportcomando para controlar mais facilmente os vários parâmetros. Um pouco à parte: um parâmetro de exportação que eu gosto bastante é Background -> None. Não é muito relevante aqui, mas permite exportar imagens PNG sem fundo. Parece muito bom quando adicionado a um pôster ou apresentação se os gráficos tiverem contraste suficiente com o fundo.

Para obter apenas os gráficos, ContourPlotusei o método de @ andre314 de pegar o primeiro elemento de plte transformá-lo em um gráfico, a saber plt[[1]]//Graphics.

O resultado do código acima com ImageSize -> {1024, 1024}é:

O resultado da declaração de exportação final acima é:

7 andre314 Dec 09 2020 at 03:19

EDITAR

Eu encontrei algo mais simples do que minha primeira resposta:

Aplique Settingao Manipulado para obter um gráfico normal.

Então, para remover todas as opções deste gráfico, uma maneira é pegar a primeira parte e reaplicar Graphic

END EDIT

RESPOSTA ANTIGA

Você pode usar a função Snapshot em Manipular.

Então remplace DynamicModuleby With(pode não ser necessário),
então a avaliação deste dá um normal Graphics. Para remover todas as opções deste gráfico, uma maneira é pegar a primeira parte e reaplicarGraphic