2011-10-25 41 views
2

嗨我無法理解以下函數的輸出。Mathematica函數的奇怪輸出

ListPointPlot3D[Table[Sin[x^2 + y], 
         {x, 0, 3, 0.15}, {y, 0, 3, 0.15}], 
         AxesLabel -> {"X axis", "Y axis", "Z axis"} 
       ] 

enter image description here

我已經告訴X和Y是在間隔[0,3]但圖是示出從約[0,21]一個完全不同的範圍爲這些變量。

這是怎麼發生的?

回答

7

你給ListPointPlot3D值的矩陣。將每個解釋爲「高度」(z座標)的值和值的矩陣索引解釋爲x和y座標。

也許你想

ListPointPlot3D[Join @@ Table[{x, y, Sin[x^2 + y]}, {x, 0, 3, 0.15}, {y, 0, 3, 0.15}]] 

Mathematica graphics

Plot3D[Sin[x^2 + y], {x, 0, 3}, {y, 0, 3}] 

Mathematica graphics

而且看一看的Plot3DMesh選項的文檔。

+0

不,我特別想要點圖。 – smilingbuddha

+0

@smilingbuddha這是我的代碼給你的。 – Szabolcs

+0

雖然你的第一個建議似乎有效。在接受你的答案之前,讓我簡單地修改它。 – smilingbuddha

1

它似乎是各「樣本」而不是實際的x/y的值作爲有20 0.15的0和3之間,這是您的表的步驟大小

4

所有2D List*繪圖函數採取List{{x1,y1},{x2,y2},...}作爲他們的第一個參數,這將正確繪製xy點。但是,如果您僅提供一組座標{y1,y2,...},那麼它將使用這些y_i中的每一個的位置作爲x標記。同樣對於所有的List*3D繪圖功能。

所以你的情況,只有一個變量,該變量z,它只是使用了單獨的子List S的指數爲xy蜱。試試這個:

ListPointPlot3D[ 
Flatten[Table[{x, y, Sin[x^2 + y]}, {x, 0, 3, 0.15}, {y, 0, 3, 
    0.15}], 1], AxesLabel -> {"X axis", "Y axis", "Z axis"}] 

Mathematica graphics

+0

謝謝你!這個解決方案也適用於我。 – smilingbuddha

5

可以使用DataRange選項來指定軸的範圍:

ListPointPlot3D[Table[Sin[x^2 + y], {y, 0, 3, 0.15}, {x, 0, 3, 0.15}], 
    AxesLabel -> {"X axis", "Y axis", "Z axis"}, 
    DataRange -> {{0, 3}, {0, 3}}] 

Mathematica graphics

請注意,我還交換了xy迭代器在Table中,因爲Table[..., {x, ..}, {y, ...}]對應於Table[Table[..., {y, ...}], {x, ...}]。 (您可以通過將其中一個0.15步長更改爲1來看到這是正確的。)