¿Cómo extraer una imagen de Manipulate, sin marco, deslizadores y ejes?

Dec 09 2020

Me gustaría extraer algunas imágenes de un Manipulateque usa un control deslizante, pero cuando lo hago desde el menú emergente, obtengo todo el marco y el control deslizante con él. ¿Cómo podemos exportar la imagen (a PNG, digamos), para un valor de control deslizante dado (digamos$k = 0.5$, para el ejemplo siguiente), sin el marco Manipular, el control deslizante e incluso sin los ejes y las marcas?

Y probablemente más complicado: ¿cómo podemos extraer los gráficos con una resolución más alta que la que muestra Manipulate? (digamos 1024 x 1024 píxeles en formato PNG, en lugar de la resolución más baja de 600 a continuación).

Aquí hay un MWE semi-genial para jugar:

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

Respuestas

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

Esto guarda el marco generado por la configuración del control deslizante en una variable llamada plt. Cada vez que cambia el control deslizante, pltse actualiza. Luego, normalmente uso el Exportcomando para poder controlar más fácilmente los diversos parámetros. Un poco al margen: un parámetro de exportación que me gusta bastante es Background -> None. No es realmente relevante aquí, pero le permite exportar imágenes PNG sin fondo. Se ve realmente elegante cuando se agrega a un póster o presentación si los gráficos tienen suficiente contraste con el fondo.

Para obtener solo los gráficos, ContourPlotutilicé el método de @ andre314 de tomar el primer elemento de plty convertirlo en un gráfico, a saber plt[[1]]//Graphics.

El resultado del código anterior con ImageSize -> {1024, 1024}es:

El resultado de la declaración de exportación final de arriba es:

7 andre314 Dec 09 2020 at 03:19

EDITAR

Encontré algo más simple que mi primera respuesta:

Aplicar Settingal Manipular para obtener un gráfico normal.

Luego, para eliminar todas las opciones de este gráfico, una forma es tomar la primera parte y volver a aplicar Graphic

FIN EDITAR

ANTIGUA RESPUESTA

Puede utilizar la función Instantánea en Manipulate.

Luego reemplace DynamicModulepor With(esto puede no ser necesario),
luego la evaluación de esto da un resultado normal Graphics. Para eliminar todas las opciones de este gráfico, una forma es tomar la primera parte y volver a aplicarGraphic