Source code for skspatial.objects.point

"""Module for the Point class."""
import numpy as np
from matplotlib.axes import Axes
from mpl_toolkits.mplot3d import Axes3D

from skspatial.objects._base_array import _BaseArray1D
from skspatial.objects.vector import Vector
from skspatial.plotting import _scatter_2d
from skspatial.plotting import _scatter_3d
from skspatial.typing import array_like


class Point(_BaseArray1D):
    """
    A point in space implemented as a 1D array.

    The array is a subclass of :class:`numpy.ndarray`.

    Parameters
    ----------
    array : array_like
        Input array.

    Attributes
    ----------
    dimension : int
        Dimension of the point.

    Raises
    ------
    ValueError
        If the array is empty, the values are not finite,
        or the dimension is not one.

    Examples
    --------
    >>> from skspatial.objects import Point

    >>> point = Point([1, 2, 3])

    >>> point.dimension
    3

    The object inherits methods from :class:`numpy.ndarray`.

    >>> point.mean()
    array(2.)

    >>> Point([])
    Traceback (most recent call last):
    ...
    ValueError: The array must not be empty.

    >>> import numpy as np

    >>> Point([1, 2, np.nan])
    Traceback (most recent call last):
    ...
    ValueError: The values must all be finite.

    >>> Point([[1, 2], [3, 4]])
    Traceback (most recent call last):
    ...
    ValueError: The array must be 1D.

    """

[docs] def distance_point(self, other: array_like) -> np.float64: """ Return the distance to another point. Parameters ---------- other : array_like Other point. Returns ------- np.float64 Distance between the points. Examples -------- >>> from skspatial.objects import Point >>> point = Point([1, 2]) >>> point.distance_point([1, 2]) 0.0 >>> point.distance_point([-1, 2]) 2.0 >>> Point([1, 2, 0]).distance_point([1, 2, 3]) 3.0 """ vector = Vector.from_points(self, other) return vector.norm()
[docs] def plot_2d(self, ax_2d: Axes, **kwargs) -> None: """ Plot the point on a 2D scatter plot. Parameters ---------- ax_2d : Axes Instance of :class:`~matplotlib.axes.Axes`. kwargs : dict, optional Additional keywords passed to :meth:`~matplotlib.axes.Axes.scatter`. Examples -------- .. plot:: :include-source: >>> import matplotlib.pyplot as plt >>> from skspatial.objects import Point >>> _, ax = plt.subplots() >>> Point([1, 2]).plot_2d(ax, c='k', s=100) """ _scatter_2d(ax_2d, self.reshape(1, -1), **kwargs)
[docs] def plot_3d(self, ax_3d: Axes3D, **kwargs) -> None: """ Plot the point on a 3D scatter plot. Parameters ---------- ax_3d : Axes3D Instance of :class:`~mpl_toolkits.mplot3d.axes3d.Axes3D`. kwargs : dict, optional Additional keywords passed to :meth:`~mpl_toolkits.mplot3d.axes3d.Axes3D.scatter`. Examples -------- .. plot:: :include-source: >>> import matplotlib.pyplot as plt >>> from mpl_toolkits.mplot3d import Axes3D >>> from skspatial.objects import Point >>> fig = plt.figure() >>> ax = fig.add_subplot(111, projection='3d') >>> Point([1, 2, 3]).plot_3d(ax, c='k', s=100) """ _scatter_3d(ax_3d, self.reshape(1, -1), **kwargs)