def plot_kite(ax, beta, phi, psi=np.pi): y, z = calc_proj(beta, phi) psi_proj = corrected_orientation_angle(beta, phi, psi)[2] t = MarkerStyle(marker=7) t._transform = t.get_transform().rotate_deg(psi_proj * 180. / np.pi) marker_obj = ax.plot(y, z, 's', marker=t, ms=20, mfc='None', mew=2, mec='k')[0]
def plot_arrow(longs, lats, distance, min_distance=0.0001, dotted=False, arrow_colour='k', dot_colour='k', lw=1): if dotted: plt.plot(longs, lats, '--', c=arrow_colour, lw=lw) else: plt.plot(longs, lats, c=arrow_colour, lw=lw) #plt.plot(longs[1],lats[1],'.',c=dot_colour,ms=10) if not dotted and distance > min_distance: angle = -np.arctan2(longs[1] - longs[0], lats[1] - lats[0]) * 180 / ( np.pi) t = MarkerStyle(marker='^') t._transform = t.get_transform().rotate_deg(angle) plt.scatter(np.mean(longs), np.mean(lats), color=arrow_colour, marker=t) #(3, 0, angle))
def quiver_dict(ax, dat, s=75, X=None, Y=None, inx=True, scale=1.0, width=None): hang = fabric_to_ver_rot(dat['fabric 1'], dat['fabric 2'], dat['fabric 5']) if inx: ang = fabric_to_ver_rot(dat['fabric 1'], dat['fabric 2'], dat['fabric 3']) ang[ang < -45] = ang[ang < -45] + 90. ang[ang > 45] = ang[ang > 45] - 90. u = np.sin(ang / 180.0 * np.pi) * dat['eigenv 3'] v = np.cos(ang / 180.0 * np.pi) * dat['eigenv 3'] units = 'width' else: u = np.zeros_like(dat['eigenv 3']) v = np.ones_like(dat['eigenv 3']) units = 'height' ang = np.zeros_like(dat['fabric 1']) singlemax = dumb_woodcock(dat) vertical = dat['fabric 2'] > (1.0 - dat['fabric 2'] - dat['fabric 1']) vertical_sm = np.logical_and(vertical, singlemax) hor_sm = np.logical_and(~vertical, singlemax) quiv = ax.quiver(X.flatten()[vertical_sm], Y.flatten()[vertical_sm], u[vertical_sm], v[vertical_sm], units=units, scale=scale, width=width) if np.any(hor_sm): hq = [ ax.plot(X.flatten()[hor_sm], Y.flatten()[hor_sm], marker='.', markersize=2, linestyle='none', color='0.4', label='Single max. partly into page') ] else: hq = [] planlabel = False ooplabel = False other_pts = [] for i in range(np.sum(~singlemax)): t = MarkerStyle(marker=HOOP) t._transform = t.get_transform().rotate_deg(-ang[~singlemax][i]) if np.isnan(dat['fabric 1'].flatten()[~singlemax][i]): continue if np.abs(hang.flatten()[~singlemax][i]) > 1: color = '0.4' if not ooplabel: label = 'Vert. girdle, normal out of x-z' ooplabel = True else: label = None else: color = 'k' if not planlabel: label = 'Vert. girdle, normal in x-z' planlabel = True else: label = None other_pts.append( ax.scatter(X.flatten()[~singlemax][i], Y.flatten()[~singlemax][i], marker=t, s=s, linewidth=0.5, c='none', edgecolors=color, label=label)) return [quiv] + hq + other_pts