Python의 Polar Heat Map 동등 물 생성 (효과적으로 ListDensityPolarPlot)
다음 형식의 데이터 세트가 있습니다.
{{\[Theta], \[Phi], r},....}
또는 더 간단하게 만들려면 :
data={{0, 0, 3.3102}, {0, 2, 3.3102}, ..., {10, 90, 4.084}}
또는 다음을 사용하여 데이터 세트를 생성 할 수 있습니다.
data=Flatten[Table[{th,phi,RandomReal[100]},{th,0,45,2},{phi,0,90,2}],1];
이제이 데이터를 극좌표로 플로팅하여 다음과 같은 것을 얻습니다.
다른 결정면을 가리키는 그림의 텍스트는 중요하지 않습니다. 균일 한 밀도 플롯을 생성하려면 데이터 포인트 사이에 약간의 보간이 있어야하지만 데이터 포인트의 전처리에서 항상 할 수 있으므로 필요하지 않은 것 같습니다. 이제 이것은 파이썬을 사용하여 다소 쉽게 생성되지만 다른 플롯 간의 레이아웃 일관성을 유지하기 위해 mathematica에서 그러한 플롯을 생성하는 방법을 찾고 있습니다.
다음을 사용하여 ListDensityPlot을 쉽게 생성 할 수 있습니다.
ListDensityPlot[data]
다음과 같습니다 (일부 범례 조작 및 그래픽 옵션이 "더보기 좋게"보이도록 조정 됨).
나는 좌표의 변환을 사용하여 직사각형 플롯을 원형 플롯으로 변환했습니다.
N[{#[[1]] Cos[#[[2]]], #[[1]] Sin[#[[2]]], #[[3]]}] & /@data
이것이 정직하게 옳다고 100 % 확신하지는 않지만, 이것이 올바른 접근 방식이라고 생각합니다. 즉, 좌표 변환
그러나 나는 여전히 그리드 선을 올바르게 추가하는 방법을 모르겠습니다. 사용자 정의 범례, 즉 Azimuthal Angle 나는 항상 나중에 손으로 추가 할 수 있다고 생각하지만 플롯하는 동안 추가하는 것이 좋습니다.
답변
내 재판은 다음과 같습니다.
SeedRandom[2020];
data = Flatten[Table[{th, phi, RandomReal[100]}, {th, 0, 45, 3},
{phi, 0, 90 Degree, 2 Degree}], 1];
func = Interpolation[data];
{{rmin, rmax}, {phimin, phimax}} = func["Domain"];
radian = 32; dphi = 15 Degree;
Legended[ParametricPlot[r {Cos[phi], Sin[phi]}, {r, rmin, rmax}, {phi, phimin, phimax},
ColorFunction ->
Function[{x, y, r, phi},
ColorData["Rainbow"]@Rescale[func[r, phi], MinMax@data[[All, 3]]]],
ColorFunctionScaling -> False, PlotPoints -> 50,
Frame -> {{True, False}, {True, False}}, PlotRangePadding -> {{1, 10}, {1, 10}},
PlotRange -> {{0, rmax}, {0, rmax}}]~Show~
PolarPlot[radian, {phi, phimin, phimax}, PolarAxes -> Automatic,
PolarTicks -> {"Degrees", None},
PolarGridLines -> {Range[phimin, phimax, dphi], Automatic}, GridLinesStyle -> Black,
PlotRange -> All, PlotStyle -> Transparent],
BarLegend[{ColorData["Rainbow"]@Rescale[#, MinMax@data[[All, 3]]] &,
MinMax@data[[All, 3]]}]]
범용 함수를 만드는 데 방해가되는 주된 장애물 PolarPlot은의 위치를 결정하는 방법이 명확하지 않다는 것 입니다 PolarAxes. (나는 radian = 32;시행 착오를 통해 결국 찾았습니다 .)