2016-06-12 2 views
2

데이터 배열을 마스크하려고합니다. 9보다 작은 배열의 모든 값에 대해이 값을 0으로 설정하고 싶습니다. 9보다 큰 모든 값 1.이 배열을 마스크로 배열에 곱하면 모든 값에 0이 곱해집니다 (따라서 데이터가 마스킹 됨). 또는 (1) i .. 예를 들어 데이터가 남아 있습니다. 희망적으로, 그것은 의미가 있습니다 ...!Matplotlib : 배열에 나노 요소를 그려야합니다.

배열의 한 요소가 "nan"이고 다른 해당 요소가 42라고 말하면 matplotlib이 동일한 크기의 두 배열을 함께 구성하는 방법이 궁금합니다. matplotlib가 자동으로이 값을 플롯하지 않습니까?

나는 그것을 추측하지만 나는이 점에 대해 몇 가지 검증을하고 싶다. 많은 감사합니다.

답변

2

배열을 마스크하면 정상적으로 그릴 수 있습니다. 두 개의 가면 배열을 추가하면 아래 예제에서 볼 수 있듯이 마스크가 적절하게 결합됩니다. 난 0과 20 사이의 임의의 데이터를 생성하고 두 배열에서 모두 9 미만의 모든 값을 마스크.

import numpy as np 
import matplotlib.pyplot as pl 

# Create random data between 0 and 20. 
a = np.random.rand(10, 10)*20 
b = np.random.rand(10, 10)*20 

# Mask all values less than 9. 
a = np.ma.array(a, mask=a < 9.) 
b = np.ma.array(b, mask=b < 9.) 

# Plot a, b and the sum of both. 
pl.subplot(131) 
pl.pcolormesh(a, cmap=pl.cm.hot) 
pl.subplot(132) 
pl.pcolormesh(b, cmap=pl.cm.hot) 
pl.subplot(133) 
pl.pcolormesh(a+b, cmap=pl.cm.hot) 
pl.show() 
+0

두 배열에서 마스크를 만들려는 경우 (예 : 한 배열에서 값이 9보다 작거나 다른 배열에서 값이 작 으면 ...) 어떻게 할 수 있습니까? – user3125347

+0

@ user3125347. 나는 나의 모범을 편집했다. – Chiel

+0

글쎄, 마스크가 9보다 작 으면 마스크가 될 것이므로 어떤 종류의 논리가 필요합니까 ...? – user3125347

2

당신은 너무 단순 마스크 행렬을 구축 할 수 있습니다 : 당신이 원하는 경우

numpy.array((yourarray > 9), dtype=int) 

당신은> =로>를 변경할 수 있습니다. 당신이 쓴 관계가 명확하지 않다면 값이 9 일 때해야할 일을 정의하지 않았다.

None의 경우, NaN, inf 값 matplotlib는 점을 그릴 수 없다. 예 :

a = numpy.array([1,2,float('nan'),4]) 
b = numpy.array([40,41,42,43]) 
pl.plot(a,b,"o") 
pl.show() 

세 번째 점은 플롯되지 않습니다.

+0

감사합니다. 네, 마스크가 적용되었습니다. 값이 9보다 작 으면 값을 적용합니다. 다른 배열에 마스크가 곱 해져서 이월되도록합니다. – user3125347

관련 문제