Wie extrahiere ich ein Bild aus Manipulate ohne Rahmen, Schieberegler und Achsen?

Dec 09 2020

Ich möchte einige Bilder aus einem Bild extrahieren Manipulate, das einen Schieberegler verwendet, aber wenn ich dies über das Popup-Menü mache, bekomme ich den gesamten Rahmen und den Schieberegler damit. Wie können wir das Bild (z. B. nach PNG) für einen bestimmten Schiebereglerwert (z. B.) exportieren?$k = 0.5$, für das folgende Beispiel), ohne den Rahmen "Manipulieren", den Schieberegler und sogar ohne die Achsen und Häkchen?

Und wahrscheinlich kniffliger: Wie können wir die Grafiken mit einer höheren Auflösung extrahieren als das, was das Manipulieren zeigt? (Sagen wir 1024 x 1024 Pixel im PNG-Format anstelle der niedrigeren Auflösung von 600 unten).

Hier ist eine halbcoole MWE zum Spielen:

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

Antworten

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

Dadurch wird der durch die Schiebereglereinstellung erzeugte Frame in einer aufgerufenen Variablen gespeichert plt. Jedes Mal, wenn sich der Schieberegler ändert, pltwird er aktualisiert. Dann verwende ich normalerweise den ExportBefehl, um die verschiedenen Parameter einfacher steuern zu können. Ein bisschen beiseite: Ein Exportparameter, den ich sehr mag, ist Background -> None. Hier nicht wirklich relevant, aber Sie können PNG-Bilder ohne Hintergrund exportieren. Sieht beim Hinzufügen zu einem Poster oder einer Präsentation sehr gut aus, wenn die Grafiken einen ausreichenden Kontrast zum Hintergrund haben.

Um nur die Grafiken zu erhalten, habe ContourPlotich die Methode von @ andre314 verwendet, das erste Element von zu nehmen pltund es in eine Grafik umzuwandeln , nämlich plt[[1]]//Graphics.

Das Ergebnis des obigen Codes mit ImageSize -> {1024, 1024}ist:

Das Ergebnis der endgültigen Exportanweisung von oben ist:

7 andre314 Dec 09 2020 at 03:19

BEARBEITEN

Ich habe etwas Einfacheres gefunden als meine erste Antwort:

Auf SettingManipulieren anwenden , um eine normale Grafik zu erhalten.

Um dann alle Optionen dieser Grafik zu entfernen, besteht eine Möglichkeit darin, den ersten Teil zu übernehmen und erneut anzuwenden Graphic

END EDIT

ALTE ANTWORT

Sie können die Snapshot-Funktion im Manipulieren verwenden.

Dann remplace DynamicModuledurch With(dies kann nicht notwendig sein),
dann die Auswertung ergibt dies eine normale Graphics. Um alle Optionen dieser Grafik zu entfernen, besteht eine Möglichkeit darin, den ersten Teil zu übernehmen und erneut anzuwendenGraphic