2016-10-12 4 views
0

숫자 계산 결과 인 데이터 파일이 있습니다. 이 파일은 특정 각도를 구면 각 r (th, ph)의 함수로 샘플링합니다.플롯 3D 구형 파라 메트릭 곡면이 비정규 각을 사용하여

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

구면 각은 구체의 파라 메트릭 서페이스 전체에 걸쳐 있지만 명백한 메쉬를 형성하지 마십시오. 단순화를 위해 구면 각은 무작위라고 가정합니다.

이 데이터에 적합한 표면을 플롯하려합니다. 음모를 꾸미고있는 표면은 볼록하지 않습니다.

나는 matlibplot과 Mayavi를 거쳤으며 모든 경우에 내가 갖고 있지 않은 2D 배열을 제공해야합니다.

+0

지금까지 파이썬에서 무엇을 시도해 봤습니까? 어떤 모듈을 사용하고 있습니까? 입력 데이터의 예를 들려 줄 수 있습니까? –

+0

지금까지 파이썬의 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 및 음모를 사용하여) 매끄러운, 부분적으로 임의의 표면과 완전히 무작위로 한 (ar = f (theta, phi)). 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') 
다음

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() 

(코드에서 제시된 순서) 개의 '방식'에 대한 표준 출력이다

enter image description hereenter image description here

관련 문제