2016-09-21 10 views
1

날짜 변수로 x 또는 y를 사용하여 x-y 플롯을 플롯하고 포인트를 채우기 위해 제 3 변수를 사용하려고합니다. 3 개 변수 중 아무도 일하지 않는 경우 내가 사용하여, 그것을 관리 :날짜와 3 번째 변수가있는 파이썬 - 산점도

ax.scatter(df['x'],df['y'],s=20,c=df['z'], marker = 'o', cmap = cm.jet) 

를 검색 후, 나는) (일반 플롯, 우리가 plot_date를 사용한다는 것을 알아보십시오. 불행히도, 나는 포인트를 채색 할 수 없었습니다. 아무도 도와 줄 수 있습니까?

import matplotlib, datetime 
import matplotlib.pyplot as plt 
import matplotlib.cm as cm 
import pandas as pd 

todayTime=datetime.datetime.now(); 
df = pd.DataFrame({'x': [todayTime+datetime.timedelta(hours=i) for i in range(10)], 'y': range(10),'z' : [2*j for j in range(10)]}); 
xAlt=[0.5*i for i in range(10)]; 

fig, ax = plt.subplots() 
ax.scatter(df['x'],df['y'],s=20,c=df['z'], marker = 'o', cmap = cm.jet) 
plt.show() 

당신은 DF를 대체 할 수 [ 'X'] xAlt에 의해 내가 하나를 알고

은 지금까지 당신에게

답변

1

감사 원하는 결과를 볼 수 : 여기

작은 예입니다 설명대로 포인트를 색칠하려면 scatter을 사용해야합니다. 한 가지 해결 방법은 FuncFormatter을 사용하여 눈금 레이블을 x 축의 시간으로 변환하는 것입니다. 아래 코드는 날짜를 숫자로 변환하고 산점도를 만들고 FuncFormatter을 사용하여 눈금 레이블을 날짜로 다시 변환합니다.

import matplotlib, datetime 
import matplotlib.pyplot as plt 
import matplotlib.cm as cm 
import pandas as pd 
from matplotlib.ticker import FuncFormatter 

todayTime=datetime.datetime.now() 
df = pd.DataFrame({'x': [todayTime+datetime.timedelta(hours=i) for i in range(10)], 'y': range(10),'z' : [2*j for j in range(10)]}) 

def my_formatter(x, pos=None): 
    d = matplotlib.dates.num2date(x) 
    if len(str(d.minute)) == 1: 
     mn = '0{}'.format(d.minute) 
    else: 
     mn = str(d.minute) 
    if len(str(d.hour)) == 1: 
     hr = '0{}'.format(d.hour) 
    else: 
     hr = str(d.hour) 
    return hr+':'+mn 

major_formatter=FuncFormatter(my_formatter) 

nums = np.array([matplotlib.dates.date2num(di) for di in df['x']]) 

fig, ax = plt.subplots() 
ax.xaxis.set_major_formatter(major_formatter) 
ax.scatter(nums,df['y'],s=20,c=df['z'], marker = 'o', cmap = cm.jet) 
xmin = df['x'][0]-datetime.timedelta(hours=1) 
xmax = df['x'][len(df['x'])-1]+datetime.timedelta(hours=1) 
ax.set_xlim((xmin,xmax)) 
plt.show() 
+0

답장을 보내 주셔서 감사합니다. 불행히도, 이것은 내가 기대하는 바가 아닙니다. 이미 xAlt에서 작동합니다. 내가하고 싶은 : ax.scatter (df [ 'x'], df [ 'y'], s = 20, c = df [ 'z'], 마커 = 'o', cmap = cm.jet) –

+0

요점은 'xAlt'를 사용하여 플로팅하는 것이지만,'my_formatter' 함수를 사용하여 x-tick에서'xAlt' ->'df [ 'x']'를 변환하는 것입니다. 그러면 x 축에서 시간이있는 플롯이 생성되고 세 번째 배열로 채색 된 점이 생성됩니다. 위에서 코드 스 니펫을 실행 해 보셨습니까? 'scatter'와'df [ 'x']'를 사용할 수 없기 때문에, 내가 제안한 것과 같은 해결 방법을 사용해야합니다. –

+0

알았어! 대단히 감사합니다 –