def path_3d(quad_path,
            ax3d,
            planned_path=None,
            waypoints=None,
            quad_lw=1.0,
            path_size=3.5,
            wp_size=6.0):

    """ Plots the path of a quad on a matplotlib axes.

    Only use if you want to modify the look of the plots, otherwise use plot_path_3d to generate plots.

    Args:
        quad_path (numpy.ndarray): A 2D numpy.ndarray of x,y,z quad positions
        ax3d (mplot3d axes3d): The mplot3d axes3d object the path's are plotted onto.
        planned_path (numpy.ndarray): A 2D numpy.ndarray of x,y,z target positions
        waypoints (numpy.ndarray): A 2D numpy.ndarray of x,y,z positions
        quad_lw (float): The float linewidth for the quads path
        path_size (float): The float markersize for the planned path markers
        wp_size (float): The float markersize for the waypoint markers

    Returns:
        ax3d (mplot3d axes3d): The mplot3d axes3d with path's plotted onto it.

    """

    if planned_path is not None:
        ax3d.plot(planned_path[:,0], planned_path[:,1], planned_path[:,2], 'go',
                  color='r', markersize=path_size, markeredgecolor='r')

    if waypoints is not None:
        ax3d.plot(waypoints[:,0], waypoints[:,1], waypoints[:,2], 'gH',
                  color='b', markersize=wp_size, markeredgecolor='b')


    ax3d.plot(quad_path[:,0], quad_path[:,1], quad_path[:,2],
              color='k', linewidth=quad_lw)

    ax3d.tick_params(labelsize=8)
    ax3d.set_xlabel('X', weight='bold')
    ax3d.set_ylabel('Y', weight='bold')
    ax3d.set_zlabel('Z', weight='bold')
    return ax3d