프레임, 슬라이더 및 축없이 Manipulate에서 그림을 추출하는 방법은 무엇입니까?

Dec 09 2020

Manipulate슬라이더를 사용하는 에서 일부 사진을 추출하고 싶지만 팝업 메뉴에서하면 모든 프레임과 슬라이더가 함께 표시됩니다. 주어진 슬라이더 값에 대해 그림 (예 : PNG)을 어떻게 내보낼 수 있습니까 (예 :$k = 0.5$, 아래 예), 조작 프레임, 슬라이더 및 축과 눈금없이?

그리고 아마도 더 까다로울 것입니다. Manipulate가 보여주는 것보다 더 높은 해상도로 그래픽을 어떻게 추출 할 수 있습니까? (아래의 600보다 낮은 해상도 대신 PNG 형식의 1024 x 1024 픽셀).

다음은 함께 플레이 할 수있는 멋진 MWE입니다.

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

답변

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

이렇게하면 슬라이더 설정에 의해 생성 된 프레임이라는 변수에 저장 plt됩니다. 슬라이더가 변경 될 때마다 plt업데이트됩니다. 그런 다음 일반적으로 Export명령을 사용 하여 다양한 매개 변수를보다 쉽게 ​​제어 할 수 있습니다. 약간의 제쳐두고 : 내가 아주 좋아하는 하나의 내보내기 매개 변수는 Background -> None. 여기서는 관련이 없지만 배경없이 PNG 이미지를 내보낼 수 있습니다. 그래픽이 배경과 충분한 대비를 이루면 포스터 나 프레젠테이션에 추가 할 때 정말 매끄럽게 보입니다.

그래픽 형식을 얻기 ContourPlot위해 @ andre314의 첫 번째 요소를 plt가져와 그래픽으로 변환하는 방법을 사용했습니다 plt[[1]]//Graphics.

위 코드의 결과는 다음과 ImageSize -> {1024, 1024}같습니다.

위에서 최종 수출 명세서의 결과는 다음과 같습니다.

7 andre314 Dec 09 2020 at 03:19

편집하다

내 첫 번째 대답보다 간단한 것을 발견했습니다.

Setting일반 그래픽을 얻으려면 조작에 적용하십시오 .

그런 다음이 그래픽의 모든 옵션을 제거하는 한 가지 방법은 첫 번째 부분을 가져 와서 다시 적용하는 것입니다. Graphic

편집 종료

오래된 답변

조작에서 스냅 샷 기능을 사용할 수 있습니다.

그런 다음 remplace DynamicModuleby With(필요하지 않을 수 있음),
이것의 평가는 정상을 제공합니다 Graphics. 이 그래픽의 모든 옵션을 제거하는 한 가지 방법은 첫 번째 부분을 가져 와서 다시 적용하는 것입니다.Graphic