2016-10-12 19 views
0

私は数値計算の結果であるデータファイルを持っています。このファイルは球面角の関数としてある量をサンプリングします。r(th、ph)プロット3D球面パラメトリックサーフェス(ノーマルアングル)

th ph r 
0.012 1.456 24 
0.014 1.25 23.5 
...... 

球面角は、球のパラメトリックサーフェス全体に及んでいますが、明らかなメッシュを形成しないでください。単純化のために、球面角度はランダムであると仮定する。

これらのデータにフィットするサーフェスをプロットしたいと思います。プロットしているサーフェスは凸ではないことに注意してください。

私はmatlibplotとMayaviを使いましたが、私は持っていない2D配列を提供する必要があります。

+0

これまでにPythonで何を試しましたか?どのモジュールを使用していますか?あなたは入力データの例を挙げることができますか? –

+0

これまでのところ私はpythonのplot_surface()とMayaviのmesh()を試しましたが、どちらも普通のグリッドでしか動作しません –

+1

2D極座標プロットを行うオプションですか? http://matplotlib.org/examples/pylab_examples/polar_demo.htmlこの例を確認しましたか? http://stackoverflow.com/questions/25236026/circular-interpolated-heat-map-plot-using-python –

答えて

0

私はあなたの質問を完全に理解しているかどうかはわかりませんが、とにかくplot_surfaceとplotlyを使用して平滑化された部分的にランダムなサーフェスと完全にランダムなサーフェス(ar = f(theta、phi ))。

import scipy.signal as scsi 
import numpy 
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 

# FIRST WAY: make just a strange sphere (it works even if not continuous) - it seems a nice vase 
theta = linspace(0,2*pi,100) 
phi = linspace(0,pi,100) + scsi.savgol_filter(numpy.random.normal(1.5,0.5, 100),11,2) 
r = scsi.savgol_filter(numpy.random.normal(2,0.2,theta.shape[0]),11,3) 
# N.B. you can use the savgol_filter to 'fit' a presupposed random noise 

# SECOND WAY: this is instead flat random 
theta = numpy.random.uniform(0,pi, 100) 
phi = numpy.random.uniform(0, pi, 100) 
# this would be your r = f(theta, phi) 
r = theta*2 + phi # random function 

x = r*outer(cos(theta),sin(phi)) 
y = r*outer(sin(theta),sin(phi)) 
z = r*outer(ones(100),cos(phi)) 

# plotting (std) 
fig = plt.figure(figsize=(10,10)) 
ax = fig.gca(projection='3d') 
ax.plot_surface(x,y,z, alpha=0.1) 
plt.draw() 
plt.show() 

次は(コードで提示順序で)2つの '方法' のSTDの出力である: enter image description hereenter image description here

plotlyバージョン(表現のと同じ順序):

# PLOTLY VERSION - DYNAMIC PLOTTING 
import plotly 
import plotly.plotly as py 
from plotly.graph_objs import * 

data = Data([ Surface(x=x, y=y, z=z) ]) 
fig = Figure(data=data) 
py.iplot(fig, filename='bloch-sphere-surface') 

enter image description hereenter image description here