2012-06-09 9 views
6

반경에 따라 알파 (불투명도) 값이있는 채움 색상을 사용하여 matplotlib에 타원을 만들고 싶습니다.matplotlib 패치의 색상 그라디언트?

예 : 2D 가우스.

어떤 방법이 있습니까?

이 색 (Gradient facecolor matplotlib bar plotthis 등) 충분히 쉽게 그라디언트하지만 원/타원에 대해 동일한 작업을 수행하는 방법을 알아낼 수 없습니다와 직사각형 플롯을 만들 수 있습니다.

답변

7

는 함수 알렉스의 포스트 여기

import matplotlib.pyplot as plt,numpy as np 

def gauplot(centers, radiuses, xr=None, yr=None): 
     nx, ny = 1000.,1000. 
     xgrid, ygrid = np.mgrid[xr[0]:xr[1]:(xr[1]-xr[0])/nx,yr[0]:yr[1]:(yr[1]-yr[0])/ny] 
     im = xgrid*0 + np.nan 
     xs = np.array([np.nan]) 
     ys = np.array([np.nan]) 
     fis = np.concatenate((np.linspace(-np.pi,np.pi,100), [np.nan])) 
     cmap = plt.cm.gray 
     cmap.set_bad('white') 
     thresh = 3 
     for curcen,currad in zip(centers,radiuses): 
       curim=(((xgrid-curcen[0])**2+(ygrid-curcen[1])**2)**.5)/currad*thresh 
       im[curim<thresh]=np.exp(-.5*curim**2)[curim<thresh] 
       xs = np.append(xs, curcen[0] + currad * np.cos(fis)) 
       ys = np.append(ys, curcen[1] + currad * np.sin(fis)) 
     plt.imshow(im.T, cmap=cmap, extent=xr+yr) 
     plt.plot(xs, ys, 'r-') 

과에서 아이디어를 사용하여 예를 들어 당신이 원하는 위치를

gauplot([(0,0), (2,3), (5,1), (6, 7), (6.1, 6.1)], [.3,. 4, .5, 1, .4], [-1,10], [-1,10]) 
      #   centers of circles   # radii of circles# 

plot

+0

나는 접근법을 좋아한다. 나는 그것을 나 자신으로 생각했지만, 몇 가지 이유로 그것을 거부했다. 1. 로그 - 로그 플롯에서 작동하지 않습니다 (패치가 잘 작동하지는 않지만 시도합니다). 2. 플롯 경계에 대한 사전 지식이 필요합니다 (이것은 해결할 수 있지만). 아직도, 잠시 동안 나는 그것으로 굴러 갈 것이다. – keflavich

+0

imshow의 출처는 왼쪽 하단에 있어야한다고 생각합니다. 'plt.imshow (im.T, cmap = cmap, extent = xr + yr, origin = "lower")'. – ImportanceOfBeingErnest

6

현재 matplotlib은 패치 용 그라데이션 채우기를 지원하지 않습니다 - this email을 참조하십시오.

john> 안녕하세요, 저는 단색 대신 채우기 패턴으로 막대 (패치 된 일련의 직사각형)를 설정하려고합니다. matplotlib에서이 작업을 수행하는 쉬운 방법이 있습니까?
john> 저는 십자가, 수직, 밀도 등의 패턴을 가진 Qt의 QBrush와 같은 것을 생각하고 있습니다.

현재이 기능에 대한 지원이 없습니다. 이 종류의 것을 지원하는 것은 너무 어렵지 않을 것입니다. 기본적으로 API를 지정하고 백엔드에 지원을 추가하려면 이 필요합니다. 나는 패치 (예 : 다각형, 사각형)에 그라데이션 채우기를 추가하려는 경우 두 번 모두 수행하는 것이 좋습니다. 대신 다음 보간 imshow를 사용 함수와 색상을, 메쉬를 만들 계산할 수있는 패치를 사용


: (체크 무늬 배경을 무시)

# Taken from http://matplotlib.sourceforge.net/examples/pylab_examples/layer_images.html 

def func3(x,y): 
    return (1- x/2 + x**5 + y**3)*exp(-x**2-y**2) 

# make these smaller to increase the resolution 
dx, dy = 0.05, 0.05 

x = arange(-3.0, 3.0, dx) 
y = arange(-3.0, 3.0, dy) 
X,Y = meshgrid(x, y) 

xmin, xmax, ymin, ymax = amin(x), amax(x), amin(y), amax(y) 
extent = xmin, xmax, ymin, ymax 

fig = plt.figure(frameon=False) 

Z2 = func3(X, Y) 

im2 = imshow(Z2, cmap=cm.jet, alpha=.9, interpolation='bilinear', extent=extent) 

show() 

이 다음에 발생합니다 다음은

http://matplotlib.sourceforge.net/_images/layer_images.png

+0

를 실행 한 다음 투명 패치와 흰색 마스크를 Z-중간 퍼팅 할 때 무엇을 얻을 마커, 평범한 배경에 그라디언트 패치와 같은 것을 더 많이 사용합니다. – cphlewis

관련 문제