발전의 의지/파이썬

Ramp analysis - 3d plot

OnlyMyStuff 2022. 5. 23. 16:17

이름은 거창하지만 램프 중 어느 구간에서 핸들 조향각속도가 빠른지 그래프 그린 것이다

 

나는 3d heatmap을 사용하여 plot 하였다

 

히트맵으로 보기에는 조금 애매한게 3d scatter에 color map만 적용한거라

 

아무튼 적당히 그렸다

 

근데 그래프 그리기가 상당히 번거롭다

 

gif animation 파일을 생성하려했으나

 

굳이 라는 생각에 안했다

 

추가로 속도도  3d plot을 해봤는데

 

그냥하면 재미가 없어서

 

120kmph 초과인지, 50키로 미만인지를 색으로 구별했다

#%%
print('스티어링 데이터 생성 (6번 실험)')

df_3 = df_2.copy()

df_3['spd_steering_abs'] = abs(df_3['spd_steering'])

df_ex_6= df_3.loc[(df_3['exp_num']==6),:]

for j in ['pos_x','pos_y','pos_z']:
    refine_pos(df_ex_6, j, -1)

df_temp = df_ex_6.iloc[:,[1,2,3,16]]

df_group = df_temp.groupby(['pos_x','pos_y','pos_z'])['spd_steering_abs'].mean().to_csv('temp.csv')

df_plot = pd.read_csv('temp.csv')

os.remove('temp.csv')

df_group = df_temp.groupby(['pos_x','pos_y','pos_z'])['spd_steering_abs'].count().to_csv('temp.csv')

df_temp = pd.read_csv('temp.csv')

df_plot['count'] = df_temp['spd_steering_abs']

df_plot = df_plot[df_plot['count']>5]

os.remove('temp.csv')

del df_group, df_temp

#%%
# 3D Heatmap in Python using matplotlib
%matplotlib
# creating figures

fig = plt.figure(figsize=(5, 5)) 
ax = fig.add_subplot(projection='3d') # 111= 1,1,1
ax.pbaspect = [1, 5.781, 0.3]
sns.set(font_scale=1)

"""
ax.set_xticks(list(range(0,350,50)))
ax.set_yticks(list(range(0,1954,50)))
ax.set_zticks(list(range(0,40,5)))
"""

"""
get_proj func 수정 필요

#xmin, xmax = np.divide(self.get_xlim3d(), self.pbaspect[0])
#ymin, ymax = np.divide(self.get_ylim3d(), self.pbaspect[1])
#zmin, zmax = np.divide(self.get_zlim3d(), self.pbaspect[2])  
"""


# setting color bar
color_map = cm.ScalarMappable(cmap=cm.Reds)
color_map.set_array(df_plot['spd_steering_abs'])

# creating the heatmap

img = ax.scatter(df_plot['pos_x'],
                 df_plot['pos_y'],
                 df_plot['pos_z'],
                 c=df_plot['spd_steering_abs'],
                 marker='o',
                 cmap=cm.Reds,
                 s=50,
                 alpha=0.5,
                 )
plt.colorbar(color_map)

# adding title and labels
ax.set_title("steering_spd_abs_ex6")
ax.set_xlabel('pos_x')
ax.set_ylabel('pos_y')
ax.set_zlabel('pos_z')
ax.auto_scale_xyz([0, 338], [0, 1954], [0, 35])


# displaying plot
plt.show()




#%% speed 3d graph


df_temp = df_ex_6.iloc[:,[1,2,3,15]]

df_group = df_temp.groupby(['pos_x','pos_y','pos_z'])['spd_comp'].mean().to_csv('temp.csv')

df_plot_2 = pd.read_csv('temp.csv')

os.remove('temp.csv')

df_group = df_temp.groupby(['pos_x','pos_y','pos_z'])['spd_comp'].count().to_csv('temp.csv')

df_temp = pd.read_csv('temp.csv')

df_plot_2['count'] = df_temp['spd_comp']

df_plot_2 = df_plot_2[df_plot_2['count']>50]

os.remove('temp.csv')

df_plot_2['over_spd'] = [1 if df_plot_2.iloc[i,3]>120 else -1 if df_plot_2.iloc[i,3]<50 else 0 for i in range(len(df_plot_2)) ]


#%%
# 3D Heatmap in Python using matplotlib
%matplotlib
# creating figures
fig = plt.figure(figsize=(5, 5)) 
ax = fig.add_subplot(projection='3d') # 111= 1,1,1
ax.pbaspect = [1, 5.781, 0.3]



# creating the heatmap

img = ax.scatter(df_plot_2['pos_x'],
                 df_plot_2['pos_y'],
                 df_plot_2['pos_z'],
                 c=df_plot_2['over_spd'],
                 cmap=cm.get_cmap('rainbow',3),
                 s=50,
                 alpha=0.5,
                 marker='o'
                 )

fig.colorbar(img,ticks=range(3),format='over_spd: %d',label='spd_over')

#    ax.scatter(data["X"], data[ydata], data["Z"],  # 3D scatter plot
#               c=data["Z"], cmap="inferno", s=5, alpha=0.5)

  
# adding title and labels
ax.set_title("spd_comp_ex6")
ax.set_xlabel('pos_x')
ax.set_ylabel('pos_y')
ax.set_zlabel('pos_z')
ax.auto_scale_xyz([0, 338], [0, 1954], [0, 35])



  
# displaying plot
plt.show()