import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
meetbrief = pd.read_excel('/Users/nosinga/workspaces/encountersailing/crewmanual/docs/070_navigation/encounter_polar_2016.xlsx',sheet_name='Calculations')
meetbrief
df = pd.read_excel('/Users/nosinga/workspaces/encountersailing/crewmanual/docs/070_navigation/encounter_polar_2016.xlsx',sheet_name='pandas_polar')
df
#df = df[:-4]
knots = [6,8,10,12,14,16,20]
def clean_kn_set(df, knot):
columns_index = range(1,9)
for index, item in enumerate(knots):
if item == knot:
column = columns_index[index + 1]
result = df.iloc[:,[0,column]]
result = result.dropna()
result = result.sort_values('TWA')
result['speed'] = result.iloc[:,1]
result.drop(result.columns[[1]],axis=1,inplace=True)
return result
clean_kn_set(df,6)
import matplotlib as mpl
mpl.rcParams['figure.figsize'] = (15,15)
import numpy as np
import matplotlib.pyplot as plt
ax = plt.subplot(111, projection='polar')
angles = {}
thetas = {}
speeds = {}
for knot in knots:
angle = clean_kn_set(df, knot)['TWA']
theta, speed = np.radians( clean_kn_set(df, knot)['TWA']), clean_kn_set(df, knot)['speed']
ax.plot(theta, speed)
# voor het volgende programma
angles.update({knot:angle})
thetas.update({knot:theta})
speeds.update({knot:speed})
ax.set_title("Encounter Polar", va="bottom")
ax.set_theta_zero_location('N', offset=0)
ax.set_rlabel_position(-22.5) # get radial labels away from plotted line
ax.grid(True)
ax.set_rmax(10)
plt.show()
for knot in knots:
angle = angles[knot]
speed = speeds[knot]
plt.plot(angle, speed)
plt.show()
import scipy.interpolate as interpolate
thetas_x = {}
speeds_x = {}
for i, knot in enumerate(knots):
angle, speed = angles[knot], speeds[knot]
angle = np.array(angle)
angle = angle.astype('float64')
speed = np.array(speed)
speed = speed.astype('float64')
angle_x = np.linspace(angle.min(),angle.max(),(10 * (angle.max() - angle.min())).astype('int') + 1)
theta_x = np.radians(angle_x)
k_factor = [5,4,3,3,3,3,2]
print('knot = ' + str(knot) + ' : k = ' + str(k_factor[i]) )
t, c, k = interpolate.splrep(angle, speed, s=0, k=k_factor[i])
spline = interpolate.BSpline(t, c, k, extrapolate=False)
speed_x = spline(angle_x)
plt.plot(angle_x, speed_x)
plt.plot(angle, speed, 'bo')
#plt.plot(angle, speed)
# voor het volgende programma
thetas_x.update({knot:theta_x})
speeds_x.update({knot:speed_x})
plt.show()
import numpy as np
import matplotlib.pyplot as plt
ax = plt.subplot(111, projection='polar')
for knot in knots:
theta_x , speed_x = thetas_x[knot], speeds_x[knot]
theta_x2 = []
for x in theta_x:
theta_x2.append(2*np.pi - x)
theta_x2 = theta_x2[::-1]
theta_x360 = np.append(theta_x, theta_x2)
speed_x2 = speed_x[::-1]
speed_x360 = np.append(speed_x, speed_x2)
ax.plot(theta_x360, speed_x360)
theta , speed = thetas[knot], speeds[knot]
ax.plot(theta, speed, 'bo')
ax.set_title("Encounter Polar", va="bottom")
ax.set_theta_zero_location('N', offset=0)
ax.set_rlabel_position(-11.25)
ax.grid(True)
ax.set_rmax(10)
plt.show()