2013-10-05 3 views
2

목표는 2D의 구형 히트 맵 플롯을 만드는 것입니다. 직사각형 도메인을 사용하면 선 아래의 플로팅 코드가 작동합니다. 그러나 원형 도메인 용 코드를 사용하려고합니다.파이썬 : 디스크의 열 밀도 플롯

from pylab import * 
import numpy as np 
from matplotlib.colors import LightSource 
from numpy.polynomial.legendre import leggauss, legval 

xi = 0.0 
xf = 1.0 
numx = 500 

yi = 0.0 
yf = 1.0 
numy = 500 


def f(x): 
    if 0 <= x <= 1: 
     return 100 
    if -1 <= x <= 0: 
     return 0 


deg = 1000 
xx, w = leggauss(deg) 
L = np.polynomial.legendre.legval(xx, np.identity(deg)) 
integral = (L * (f(x) * w)[None,:]).sum(axis = 1) 

c = (np.arange(1, 500) + 0.5) * integral[1:500] 


def r(x, y): 
    return np.sqrt(x ** 2 + y ** 2) 


theta = np.arctan2(y, x) 
x, y = np.linspace(0, 1, 500000) 


def T(x, y): 
    return (sum(r(x, y) ** l * c[:,None] * 
       np.polynomial.legendre.legval(xx, identity(deg)) for l in range(1, 500))) 

T(x, y)l 전력 회 르장 드르 다항식에 xy의 함수로서 c 계수 배의 반경의 합과 같아야한다 : 구의 반경은 지금까지이 코드는 1이다 논쟁은 legendre 다항식의이다 cos(theta)이다.

python: integrating a piecewise function에서 나는 합계에서 Legendre 다항식을 사용하는 방법을 배웠지 만 그 방법은 약간 다르며 작도를 위해서는 함수 T(x, y)이 필요합니다.


이것은 플로팅 코드입니다.

densityinterpolation = 'bilinear' 
densitycolormap = cm.jet 
densityshadedflag = False 
densitybarflag = True 
gridflag = True 
plotfilename = 'laplacesphere.eps' 

x = arange(xi, xf, (xf - xi)/(numx - 1)) 
y = arange(yi, yf, (yf - yi)/(numy - 1)) 
X, Y = meshgrid(x, y) 
z = T(X, Y) 


if densityshadedflag: 
    ls = LightSource(azdeg = 120, altdeg = 65) 
    rgb = ls.shade(z, densitycolormap) 
    im = imshow(rgb, extent = [xi, xf, yi, yf], cmap = densitycolormap) 
else: 
    im = imshow(z, extent = [xi, xf, yi, yf], cmap = densitycolormap) 
im.set_interpolation(densityinterpolation) 
if densitybarflag: 
    colorbar(im) 


grid(gridflag) 

show() 

나는 당신이 ('유모'를 떠 (또는 중 도메인 당신이 원하는) 디스크 도메인 외부의 값을 설정하면 내 최종 목표는 enter image description here

+1

저는 이것이 흥미로운 질문이라고 생각합니다.하지만 표현법이 Legendre 다항식 등으로 싸여있는 방식으로, 여러분이 정말로 묻고있는 것을 알아내는 것은 어렵습니다. 디스크에 히트 맵을 만드는 방법을 알고 싶습니까? 그건 흥미로운 것 같습니다. 그렇다면 어쩌면이 질문을 삭제하고 그 질문에 집중하는 다른 질문을 할 수 있습니다. – tom10

+0

@ tom10 디스크에 히트 맵을 만드는 방법을 알고 싶습니다. 또한, 저는 루틴 드르 다항식의 사용법을 방금 배웠고 함수의 설정을 완전히 이해하지 못했기 때문에 루테인 드 다항식의 합계를 어떻게 적용 할 것인지 완전히 이해하지 못했습니다. – dustin

+1

아마도 "디스크상의 히트 맵"과 "Legendre 다항식의 합계 실행"이 별도의 질문으로 더 좋을 수도 있습니까? – tom10

답변

0

무엇 참조 용 매스 매 티카에서 플롯을 만들어), 그 점들은 무시할 것입니다 (흰색으로 남겨 둡니다).