2012-01-04 5 views
4

실험의 값을 포함하는 mat 크기의 매트릭스가 있습니다 (i x j).x 및 y 축이 별도의 목록에있는 Mathematica 3D 플롯

ListPlot3D[mat]을 사용하는 경우 3D 플롯으로 시각화 할 수 있습니다.

나는 또한 나의 실험에서 결정한 크기가 i (aRow)이고 크기가 j (aCol) 인 두 개의 배열을 가지고있다.

ListPlot3D[mat]으로 표시된 기본 x 및 y 축을 aRowaCol으로 바꾸려면 어떻게해야합니까?

답변

3

Ticks 옵션을 살펴보고 문서에서이 예제를 사용하십시오.


여기에 한 가지 방법이 있습니다. 먼저 몇 가지 예제 데이터를 생성하십시오.

mat = Table[Exp[-(x^2 + y^2)], {x, -2, 2, .1}, {y, -2, 2, .1}];  
aCol = aRow = Round[mat[[20]], 0.01]; 

3D로 그림을 그립니다. 가능한 모든 것 중에서 10 번째 틱 마크를 모두 표시하기로했습니다. list[[;; ;; 10]]은 목록의 10 번째 요소를 선택합니다. 도 2D에서

ListPlot3D[mat, 
Ticks -> { 
    Transpose[{[email protected][aRow], aRow}][[;; ;; 10]], 
    Transpose[{[email protected][aCol], aCol}][[;; ;; 10]], 
    Automatic}] 

Mathematica graphics

플롯을. ListDensityPlot는 임의의 진드기, 단지 다른 범위를 필요로하지 않는 경우가 Frame (하지 Axes) 기본적으로, 우리가 FrameTicks

ListDensityPlot[mat, 
FrameTicks -> { 
    Transpose[{[email protected][aRow], aRow}][[;; ;; 10]], 
    Transpose[{[email protected][aCol], aCol}][[;; ;; 10]], 
    None, None}, 
Mesh -> Automatic] 

Mathematica graphics


업데이트

을 사용하여이 보통의 선형 공간 눈금에 대해서는 다음과 같이 DataRange 옵션을 사용할 수 있습니다 :

ListPlot3D[mat, DataRange -> {{0, 1}, {0, 1}}] 

Mathematica graphics

(좌표가 균등하지 않기 때문에) 당신은 여전히 ​​{x,y,z} 형식의 데이터가 필요한 경우

Join @@ MapThread[Append, {Outer[List, aRow, aCol], mat}, 2] 
+0

그런 짓을하는 것입니다하지만 난을 제어하는 ​​것 진드기를 사용하지 않고 기본 설정대로 틱 간격을 지정하십시오. – akk

+0

어떤 식 으로든 데이터 자체에서 "Transpose"명령을 사용하여이 작업을 수행 할 수 있다고 가정했습니다. 편집 : 나는 Transpose – akk

+0

@akk 의미 내 지식에 자동 생성 된 눈금을 검색 할 수있는 방법은 없습니다 ('AbsoluteOptions [그래픽, 틱]'자동'반환). 나는 이것을 오래 전에하려고했던 것을 기억하지만, 나는 실패했다. 진드기 밀도를 찾기 위해 자신의 알고리즘을 고안해야합니다. – Szabolcs

2

의 연속 요소 사이의 차이점하면 사용하여 구축 할 수 있습니다 aRowbRow은 일정합니다.

ListPlot3D[mat, DataRange -> (Through[{Min, Max}[#]] & /@ {aCol, aRow})] 

그렇다면 요소가 {aCol[[i]], aRow[[j]], mat[[j,i]]} 인 목록을 만들고 그 목록을 그릴 수 있습니다.예를 들어,이 작업을 수행하는 여러 가지 방법이있다

list = Flatten[Table[{aCol[[i]], aRow[[j]], mat[[j, i]]}, 
    {i, Length[aCol]}, {j, Length[aRow]}], 1]; 

ListPlot3D[list] 

편집

list을 만들 수있는 빠른 방법이 좋은

list = ConstantArray[0, {Length[aCol] Length[aRow], 3}]; 
list[[All, {2, 1}]] = Tuples[{aRow, aCol}]; 
list[[All, 3]] = Flatten[mat];