DensityPlot3D의 색상 함수가 예상대로 작동하지 않습니다.

Nov 21 2020

DensityPlot3D출력 의 색상 기능을 설정하여 양수 값은 한 색상으로, 음수 값은 다른 색상으로 색상을 지정하려고합니다. 그러나 제대로 작동하지 않는 것 같습니다. 예를 들어 관련 코드는 다음과 같습니다.

\[CapitalOmega] = 
  Parallelepiped[{-3, -3, -4}, {{6, 0, 0}, {0, 6, 0}, {0, 0, 8}}];

DensityPlot3D[x*y*z,
              {x, y, z} \[Element] \[CapitalOmega], 
              PerformanceGoal -> "Quality", 
              PlotRange -> All, 
              OpacityFunction -> Function[f, If[Abs[f] > 0.4, Abs@Tanh[f], 0]], 
              PlotLegends -> Automatic, 
              ImageSize -> Medium, 
              AxesLabel -> Automatic, 
              ColorFunction -> Function[f, Which[Sign[f] == 1, Black, Sign[f] == -1, Blue, Sign[f] == 0, Gray]]
]

여기에서 제가 사용하도록 말하는 색상 기능은

Function[f, Which[Sign[f] == 1, Black, Sign[f] == -1, Blue, Sign[f] == 0, Gray]]

따라서 제품의 양수 값을 x*y*z가져와 검정색으로, 음수 값을 가져와 파란색으로 채색하고 나머지는 모두 회색으로 만듭니다.

이 코드는 자체적으로 실행될 때 다음을 생성합니다.

내가 원하는 것이 아닙니다 :(. 색상 함수의 인수를 오해하고 있습니까? 문서를 읽고 올바르게 사용하고 있다고 생각하지만 그렇지 않은 것 같습니다. 함수도 시도했습니다.

(Which[Sign[#] == -1, Blue, Sign[#] == 0, Gray, Sign[#] == 1, 
   Black] &)

같은 결과로. OpacityFunction위의 예제 이미지에서 알 수 있듯이 에도 문제 가 있습니다. 예제 코드의 OpacityFunction은 기본적으로 중앙은 투명하고 큐브의면은 단색 인 이미지를 생성해야하지만, 이미지는 큐브의 모서리가 다음으로 설정되어 있음을 보여줍니다. 0 불투명도. 예 : 점 (-2, -2, -2)는 불투명해야합니다.|Tanh[-8]|~1

위의 예제 함수를 사용하면 실제 함수가 훨씬 더 복잡합니다. 아래에 색상을 지정해야하는 실제 함수의 출력을 첨부하겠습니다.

불투명도 함수를 사용하여 0에 가까운 값을 버리고 흥미로운 비트를 남겨 둡니다.

나는 통찰력에 감사드립니다!

답변

2 shanedrum Nov 21 2020 at 18:28

아, 내가 인수를 공급하기 때문에 그것이 실현 ColorFunction되어 확장 된 플롯 값의 버전. 따라서 플롯에서 보는 값 ColorFunction은 작동중인 정확한 값이 아닙니다 . 스케일링을 중지하려면 간단히

ColorFunctionScaling-> False

OpacityFunctionScaling -> False

문제가 해결되었습니다.

이제 다음 코드는

DensityPlot3D[x*y*z, {x, y, z} \[Element] \[CapitalOmega], 
             PerformanceGoal -> "Quality",
             PlotRange -> All, 
             OpacityFunction -> Function[f, If[Abs[f] > 0.5, N[ Abs[Tanh[f]]], 0]], 
             PlotLegends -> Automatic,
             ImageSize -> Medium, 
             AxesLabel -> Automatic, 
             ColorFunction -> Function[{f}, If[f > 0, Green, Blue]], 
             ColorFunctionScaling -> False,
             OpacityFunctionScaling -> False
]

이미지를 생성

완벽하게 사용하고 싶은 실제 기능으로 변환됩니다. 알 수 있듯이 x y z 의 양수 값을 가진 영역 은 녹색으로 표시되고 x y z 의 음수 값을 가진 영역 은 파란색으로 표시됩니다. 또한 Opacity도 원하는대로 작동합니다.

이 링크는 내 문제를 해결하는 데 도움이되었습니다.

  1. ColorFunction 관련 문제
  2. Plot3D에 대한 조각 별 색 함수

이 답변이 비슷한 문제를 겪고있는 다른 사람들에게 도움이되기를 바랍니다.