2017-10-31 2 views
0

y- 값이 1 인 커브 아래 영역을 채우려고합니다. x 축은 비정규 값이있는 날짜/시간 배열입니다. 보시다시피 채우기에는 x- 데이터가없는 영역도 포함됩니다. fill_between에게 유효한 데이터 사이에만 채우기를 지시하는 방법이 있습니까? 즉 나는 아래의 음모는matplotlib fill_between 비 순차적 데이터의 영역을 무시합니다.

tx = array(datetimes) # Array of irregular datetimes 
ty = array([ones and zeros]) # Array of ones and zeros same size as tx 

fig = plt.figure() 
ax = fig.add_subplot(1, 1, 1) 
ax.plot(tx, ty, 'r.') 
ax.fill_between(tx, 0, 1, where(ty==1)) 

Filled_values

+0

당신은 어떻게되는 데이터가 "없는"되는 점을 알고하기 matplotlib imaginge합니까? 여기서, "실종"이란 당신의 머리 속에있는 상상적인 패턴의 배경에 대한 당신의 개인적인 해석이지만, matplotlib은 그것을 어떻게 알아야합니까? 문제 해결을 위해 문제의 [mcve]를 입력하고 누락 된 데이터를 설명하는 예제를 선택하십시오. 따라서 채워서는 안됩니다. – ImportanceOfBeingErnest

답변

0

이것은 당신이 목표로하는지 수 있습니다 흰색으로 "실종"샘플 사이의 영역을 싶습니다. 이 경우

filled areas

당신은 직사각형 패치를 사용할 수 있습니다. 이 코드에서 :

  • y은 '불규칙한'패턴에 해당하는 값 목록입니다.
  • delta_float은 틱 사이의 거리 인 delta에 해당하는 그래프에서 수평 거리를 측정합니다.
  • 패치는 날짜와 delta_float 단위를 기준으로 배치되고 크기가 지정됩니다.

import datetime 
import matplotlib.pyplot as plt 
import matplotlib.patches as patches 
from matplotlib.dates import DayLocator, HourLocator, DateFormatter, drange, date2num 
from numpy import arange 

date1 = datetime.datetime(2000, 3, 2) 
date2 = datetime.datetime(2000, 3, 6) 
delta = datetime.timedelta(hours=6) 
dates = drange(date1, date2, delta) 

delta_float = (dates[-1]-dates[0])/len(dates) 

y = [1,1,0,0,1,1,1,0,1,1,0,0,1,1,0,0] 

fig, ax = plt.subplots() 
ax.plot_date(dates, y, 'r.') 
ax.add_patch(patches.Rectangle((dates[0], 0), delta_float, 1, color='grey')) 
ax.add_patch(patches.Rectangle((dates[4], 0), 2*delta_float, 1, color='grey')) 
ax.add_patch(patches.Rectangle((dates[8], 0), delta_float, 1, color='grey')) 
ax.add_patch(patches.Rectangle((dates[12], 0), delta_float, 1, color='grey')) 

ax.xaxis.set_major_locator(DayLocator()) 
ax.xaxis.set_minor_locator(HourLocator(arange(0, 25, 6))) 
ax.xaxis.set_major_formatter(DateFormatter('%Y-%m-%d')) 

ax.fmt_xdata = DateFormatter('%Y-%m-%d %H:%M:%S') 
fig.autofmt_xdate() 

plt.show() 
관련 문제