Bagaimana cara mengekstrak gambar dari Memanipulasi, tanpa bingkai, penggeser, dan sumbu?

Dec 09 2020

Saya ingin mengekstrak beberapa gambar dari Manipulateyang menggunakan slider, tetapi ketika saya melakukannya dari menu pop-up, saya mendapatkan semua frame dan slider dengannya. Bagaimana kita bisa mengekspor gambar (ke PNG, katakanlah), untuk nilai slider tertentu (katakanlah$k = 0.5$, untuk contoh di bawah), tanpa bingkai Memanipulasi, slider, dan bahkan tanpa sumbu dan kutu?

Dan mungkin lebih rumit: bagaimana kami dapat mengekstrak grafik dengan resolusi yang lebih tinggi daripada yang ditunjukkan oleh Manipulate? (katakanlah 1024 x 1024 piksel dalam format PNG, bukan resolusi yang lebih rendah dari 600 di bawah).

Inilah MWE semi-keren untuk dimainkan:

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

Jawaban

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

Ini menyimpan bingkai yang dihasilkan oleh pengaturan slider ke variabel yang disebut plt. Setiap kali slider berubah, pltdiperbarui. Kemudian, saya biasanya menggunakan Exportperintah agar saya dapat lebih mudah mengontrol berbagai parameter. Sedikit tambahan: satu parameter ekspor yang saya suka adalah Background -> None. Tidak terlalu relevan di sini, tetapi memungkinkan Anda mengekspor gambar PNG tanpa latar belakang. Terlihat sangat apik saat ditambahkan ke poster atau presentasi jika grafiknya cukup kontras dengan latar belakang.

Untuk mendapatkan bentuk grafik saja, ContourPlotsaya menggunakan metode @ andre314 dengan mengambil elemen pertama pltdan mengubahnya menjadi grafik, yaitu plt[[1]]//Graphics.

Hasil dari kode di atas dengan ImageSize -> {1024, 1024}adalah:

Hasil dari pernyataan ekspor akhir dari atas adalah:

7 andre314 Dec 09 2020 at 03:19

EDIT

Saya telah menemukan sesuatu yang lebih sederhana dari jawaban pertama saya:

Terapkan Settingke Manipulate untuk mendapatkan grafik normal.

Kemudian untuk menghapus semua opsi grafik ini, salah satu caranya adalah dengan mengambil bagian pertama dan mengajukan permohonan kembali Graphic

AKHIRKAN EDIT

JAWABAN LAMA

Anda dapat menggunakan fungsi Snapshot di Memanipulasi.

Kemudian ganti DynamicModuledengan With(ini mungkin tidak perlu),
maka evaluasi ini memberikan nilai normal Graphics. Untuk menghapus semua opsi grafik ini, salah satu caranya adalah dengan mengambil bagian pertama dan mengajukan permohonan kembaliGraphic