Jak wyodrębnić obraz z Manipulate, bez ramki, suwaków i osi?

Dec 09 2020

Chciałbym wyodrębnić kilka obrazów z Manipulatesuwaka, ale kiedy robię to z wyskakującego menu, otrzymuję z nim całą ramkę i suwak. Jak możemy wyeksportować obraz (powiedzmy do PNG) dla danej wartości suwaka (powiedzmy$k = 0.5$, na przykład poniżej), bez ramki Manipulate, suwaka, a nawet bez osi i kleszczy?

I chyba trudniejsze: jak możemy wyodrębnić grafikę o wyższej rozdzielczości niż to, co pokazuje Manipulate? (powiedzmy 1024 x 1024 pikseli w formacie PNG, zamiast niższej rozdzielczości 600 poniżej).

Oto pół-fajne MWE do zabawy:

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

Odpowiedzi

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

To zapisuje ramkę wygenerowaną przez ustawienie suwaka do zmiennej o nazwie plt. Za każdym razem, gdy suwak się zmienia, pltjest aktualizowany. Następnie zazwyczaj używam Exportpolecenia, aby łatwiej kontrolować różne parametry. Trochę na bok: jeden parametr eksportu, który bardzo mi się podoba, to Background -> None. Nie ma tu znaczenia, ale pozwala eksportować obrazy PNG bez tła. Wygląda naprawdę zgrabnie podczas dodawania do plakatu lub prezentacji, jeśli grafika ma wystarczający kontrast z tłem.

Aby uzyskać tylko grafikę ContourPlotz metody @ andre314, wziąłem pierwszy element plti przekształciłem go w grafikę, a mianowicie plt[[1]]//Graphics.

Rezultatem powyższego kodu ImageSize -> {1024, 1024}jest:

Wynikiem końcowego oświadczenia eksportowego z powyższego jest:

7 andre314 Dec 09 2020 at 03:19

EDYTOWAĆ

Znalazłem coś prostszego niż moja pierwsza odpowiedź:

Zastosuj Settingdo Manipuluj, aby uzyskać normalną grafikę.

Następnie, aby usunąć wszystkie opcje tej grafiki, jednym ze sposobów jest wzięcie pierwszej części i ponowne zastosowanie Graphic

KONIEC EDYCJI

STARA ODPOWIEDŹ

Możesz użyć funkcji Snapshot w Manipulate.

Następnie zamień DynamicModuleprzez With(może to nie być konieczne),
a ocena tego daje normalne Graphics. Aby usunąć wszystkie opcje tej grafiki, jednym ze sposobów jest wzięcie pierwszej części i ponowne zastosowanieGraphic