1

データシェーダーでプロットを作成しようとしています。データ自体は、極座標の点の時系列です。私はそれらをデカルト座標に変換し(等間隔のピクセルにする)、データシェーダーでそれらをプロットできました。

私が立ち往生している点は、データフレーム全体を単一の線として接続するline()代わりに、それらをプロットするだけであるということです。points()グループごとにデータフレームグループのデータをプロットしたいと思います(グループは の名前ですlist_of_names )キャンバスに線としてプロットします。

データはこちら

私はデータシェーダーでこの種の画像を取得します

私はデータシェーダーでこの種の画像を取得します

これは、line()```` の代わりに points```´ を使用して生成されたプロットのズームイン ビューです。目標は、同じプロットを生成することですが、点の代わりに接続された線を使用します。

これは、生成されたプロットのズームイン ビューです。目的は同じプロットを生成することですが、点ではなく接続された線を使用しますpoints()line()


import datashader as ds, pandas as pd, colorcet
import numby as np

df = pd.read_csv('file.csv')


print(df)

starlink_name = df.loc[:,'Name']
starlink_alt = df.loc[:,'starlink_alt']
starlink_az = df.loc[:,'starlink_az']

name = starlink_name.values
alt = starlink_alt.values
az = starlink_az.values
print(name)
print(df['Name'].nunique())
df['Date'] = pd.to_datetime(df['Date'])

for name, df_name in df.groupby('Name'):
    print(name)

df_grouped = df.groupby('Name')



list_of_names = list(df_grouped.groups)
print(len(list_of_names))
#########################################################################################

#i want this kind of plot with connected lines with datashader

#########################################################################################
fig = plt.figure()
ax = fig.add_axes([0.1,0.1,0.8,0.8], polar=True)
# ax.invert_yaxis()
ax.set_theta_zero_location('N')
ax.set_rlim(90, 60, 1)
# Note: you must set the end of arange to be slightly larger than 90 or it won't include 90
ax.set_yticks(np.arange(0, 91, 15))
ax.set_rlim(bottom=90, top=0)


for name in list_of_names:
    df2 = df_grouped.get_group(name)
    ax.plot(np.deg2rad(df2['starlink_az']), df2['starlink_alt'], linestyle='solid', marker='.',linewidth=0.5, markersize=0.1)
plt.show()


print(df)
#########################################################################################

#transformation to cartasian coordiantes

#########################################################################################
df['starlink_alt'] = 90 -  df['starlink_alt']

df['x'] = df.apply(lambda row: np.deg2rad(row.starlink_alt) * np.cos(np.deg2rad(row.starlink_az)), axis=1)
df['y'] = df.apply(lambda row: -1 * np.deg2rad(row.starlink_alt) * np.sin(np.deg2rad(row.starlink_az)), axis=1)

#########################################################################################

# this is what i want but as lines group per group

#########################################################################################

cvs = ds.Canvas(plot_width=2000, plot_height=2000)
agg = cvs.points(df, 'y', 'x')
img = ds.tf.shade(agg, cmap=colorcet.fire, how='eq_hist')


#########################################################################################

#here i am stuck

#########################################################################################


for name in list_of_names:
    df2 = df_grouped.get_group(name)
    cvs = ds.Canvas(plot_width=2000, plot_height=2000)
    agg = cvs.line(df2, 'y', 'x')
    img = ds.tf.shade(agg, cmap=colorcet.fire, how='eq_hist')
    #plt.imshow(img)
plt.show()



4

1 に答える 1