Comment extraire une image de Manipuler, sans cadre, curseurs et axes?

Dec 09 2020

Je voudrais extraire des images d'un Manipulatequi utilise un curseur, mais lorsque je le fais à partir du menu contextuel, j'obtiens tout le cadre et le curseur avec. Comment pouvons-nous exporter l'image (au format PNG, par exemple), pour une valeur de curseur donnée (par exemple$k = 0.5$, pour l'exemple ci-dessous), sans le cadre Manipuler, le curseur, et même sans les axes et les graduations?

Et probablement plus compliqué: comment extraire les graphiques avec une résolution plus élevée que ce que montre le Manipulate? (disons 1024 x 1024 pixels au format PNG, au lieu de la résolution inférieure de 600 ci-dessous).

Voici un MWE semi-cool avec lequel jouer:

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

Réponses

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

Cela enregistre l'image générée par le réglage du curseur dans une variable appelée plt. Chaque fois que le curseur change, pltest mis à jour. Ensuite, j'utilise généralement la Exportcommande pour pouvoir contrôler plus facilement les différents paramètres. Un petit aparté: un paramètre d'exportation que j'aime bien est Background -> None. Pas vraiment pertinent ici, mais cela vous permet d'exporter des images PNG sans arrière-plan. Semble vraiment élégant lors de l'ajout à une affiche ou une présentation si les graphiques ont un contraste suffisant avec l'arrière-plan.

Pour obtenir uniquement les graphiques, ContourPlotj'ai utilisé la méthode de @ andre314 pour prendre le premier élément de pltet le transformer en graphique, à savoir plt[[1]]//Graphics.

Le résultat du code ci-dessus avec ImageSize -> {1024, 1024}est:

Le résultat de la déclaration d'exportation finale ci-dessus est:

7 andre314 Dec 09 2020 at 03:19

ÉDITER

J'ai trouvé quelque chose de plus simple que ma première réponse:

Appliquer Settingà la manipulation pour obtenir un graphique normal.

Ensuite, pour supprimer toutes les options de ce graphique, une façon est de prendre la première partie et de réappliquer Graphic

FIN DE LA MODIFICATION

ANCIENNE RÉPONSE

Vous pouvez utiliser la fonction Snapshot dans le Manipuler.

Puis remplacez DynamicModulepar With(cela peut ne pas être nécessaire),
alors l'évaluation de cela donne une normale Graphics. Pour supprimer toutes les options de ce graphique, une façon est de prendre la première partie et de réappliquerGraphic