Dans le cas d'un tracé bidimensionnel, les types de données pouvant être exprimés sont jusqu'à trois types en utilisant l'axe des x, l'axe des y et la couleur. Suite à l'édition MATLAB (https://qiita.com/Yuricst/items/1594cacb930bd4fa6d63), une note sur l'ajout d'une barre de couleurs dans le tracé avec Matplotlib en Python. (Même si ce n'est pas la solution optimale, il semble que cette méthode puisse être utilisée à temps. Elle sera mise à jour de temps en temps.)
Dans le cas de la dispersion, c'est assez simple, spécifiez le tableau que vous souhaitez utiliser comme paramètre de couleur lorsque vous utilisez
scatter () '' avec
c ''`, et spécifiez la carte de couleur avec cmap``` Précisez simplement avec. En guise de mise en garde, le
fig.colorbar () '' utilisé pour ajouter une barre de couleurs nécessite un objet mappable, donc le scatter lui-même doit être affecté en tant qu'objet (im0 dans l'exemple ci-dessous). .. Lorsque vous utilisez le sous-tracé, si les paramètres de couleur sont identiques, il n'y a pas de problème même si vous n'affectez pas tous les sous-tracés en tant qu'objets.
# assign color array
cc = transfer_df['Jacobi_LPO']
plt.rcParams["font.size"] = 16
fig, axs = plt.subplots(1, 3, figsize=(15, 6))
im0 = axs[0].scatter(transfer_df['loi_cost']*1000, transfer_df['incl'], c=cc, cmap='plasma', s=15, marker='x')
axs[0].set_xlabel('LOI cost [m/sec]')
axs[0].set_ylabel('Inclination [deg]')
axs[0].grid(True)
axs[1].scatter(transfer_df['loi_cost']*1000, transfer_df['raan'], c=cc, cmap='plasma', s=15, marker='x')
axs[1].set_xlabel('LOI cost [m/sec]')
axs[1].set_ylabel('RAAN [deg]')
axs[1].grid(True)
axs[2].scatter(transfer_df['loi_cost']*1000, -transfer_df['tof_EM_SOI']*Tstar_EM/(60*60*24), c=cc, cmap='plasma', s=15, marker='x')
axs[2].set_xlabel('LOI cost [m/sec]')
axs[2].set_ylabel('Tof til lunar SOI [days]')
axs[2].grid(True)
fig.colorbar(im0, label='LPO Jacobi')
plt.suptitle(f'Moon SOI leg, beta = {transfer_df.iloc[0,:]['beta0']}')
plt.tight_layout(rect=[0, 0.03, 1, 0.95])
plt.show()
Dans le cas de l'intrigue, le processus devient un peu compliqué. Grosso modo
--Enregistrez les données que vous souhaitez tracer en
points```
--Assignez des `` points '' et une barre de couleur dans LineCollection
# plot of the transfer (xy-plot)
fig, axs = plt.subplots(1, 1, figsize=(12,10))
plt.rcParams["font.size"] = 20
for j in tqdm( range(len(df_peritarg)) ):
# generate segments
points = np.array([proptry["x_arr"] *Lstar , proptry["y_arr"] *Lstar]).T.reshape(-1, 1, 2)
segments =np.concatenate([points[:-1], points[1:]], axis=1)
loi_color = df_peritarg.iloc[j,:]["time2perilune"]*Tstar/86400 * np.ones(( len(proptry["x_arr"]) ,))
# create color bar
norm = plt.Normalize(min( df_peritarg["time2perilune"] )*Tstar/86400, max( df_peritarg["time2perilune"])*Tstar/86400)
lc = LineCollection(segments, cmap='Reds', norm=norm)
# Set the values used for colormapping
lc.set_array( loi_color )
lc.set_linewidth(0.8)
line = axs.add_collection(lc)
# display colorbar
fig.colorbar(line, ax=axs, label="Transfer time [days]")
axs.grid()
axs.set_title(f'Targeting from {familydf.iloc[0,:]["family"]}')
axs.set_xlabel('x [km]')
axs.set_ylabel('y [km]')
axs.set_xlim(300000, 500000)
axs.set_ylim(-60000, 60000)
axs.set_aspect('equal')
Recommended Posts