발전의 의지/파이썬
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()