Построить прямую по точкам питон

Как построить прямую через две точки?

У меня есть две координаты (x1,y1) и (x2,y2). Как можно нарисовать прямую в matplotlib.pyplot через эти две точки, чтобы она продолжалась, а не только была отрезком, при этом использовав уравнение прямой , т.к. в последующем нужно найти пересечение двух прямых и найти координату точки пересечения этих прямых.

Через две точки построить прямую
На координатой сетке построить прямую через две точки. Что-то пробывал, но не выходит. unit.

Построить прямую проходящую через 2 заданные точки не используя line
построить прямую проходящую через 2 заданные точки не используя line

Провести через точку M прямую,пересекающую две данные прямые и найти их точки пересечения
Дана точка М(1;7;11). И две прямые (x-1)/2=(y-2)/3=(z-4)/2 (x-2)/3=(y-1)/2=(z-3)/-2 .

Как провести прямую, соединяющую две точки, не используя процедуру Line?
Точки заданы с клавиатуры. Уравнение прямой y=kx+b k=(y2-y1)/(x2-x1) b=y1-kx1

Вычисление проекции произвольной точки на прямую проходящую чрез две точки
Создать метод (вне метода main), который вычисляет проекцию произвольной точки на прямую.

1. Найти уравнение прямой http://www.math.by/geometry/eqline.html
2. По этому уравнению построить прямую на каком-то отрезке включающего точки (x1,y1) и (x2,y2), например через цикл for
3. Запихнуть полученные точки в п.2 в matplotlib

Добавлено через 11 минут

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
import matplotlib.pyplot as plt # Например для точек (10,10) и (50,50) # уравнение прямой будет −40x+40y+0=0 # найдем все точки для х равным от 0 до 100 # соответвенно уравнение прямой будет иметь вид # 40y = 40x-0 (или y=x) x = [] y = [] for i in range(101): x_add = i y_add = i #так как уравнение у нас у=x x.append(x_add) y.append(y_add) plt.plot(x, y) plt.show()

ЦитатаСообщение от Mia_Moor Посмотреть сообщение

Вообще зная уравнения прямой (все равно вы ее будете строить на каком-то отрезке) можно взять только крайние точки, не перебирая через for

ЦитатаСообщение от Mia_Moor Посмотреть сообщение

Построить окружность, проходящую через две данные точки и касающуюся данной прямой
Построить окружность, проходящую через две данные точки и касающуюся данной прямой (методом ГМТ)

Построить изображение перпендикуляра, опущенного из точки Р1 на прямую
В плоскости П даны прямая l(л), точка Р и параллелограмм ABCD — изображение прямой l(л)1, точки.

Источник

Matplotlib. Урок 4.1. Визуализация данных. Линейный график

Follow us on Google Plus Follow us on rss

Линейный график – это один из наиболее часто используемых видов графика для визуализации данных. Он использовался нами для демонстрации возможностей Matplotlib в предыдущих уроках, в этом уроке мы более подробно рассмотрим возможности настройки его внешнего вида.

Построение графика

Для построения линейного графика используется функция plot() , со следующей сигнатурой:

plot([x], y, [fmt], *, data=None, **kwargs)

plot([x], y, [fmt], [x2], y2, [fmt2], …, **kwargs)

Если вызвать функцию plot() с одним аргументом – вот так: plot(y) , то мы получим график, у которого по оси ординат (ось y ) будут отложены значения из переданного списка, по по оси абсцисс (ось x ) – индексы элементов массива.

Читайте также:  Куб в opengl python

Рассмотрим аргументы функции plot() :

Параметры аргумента fmt

Определяет тип маркера, может принимать одно из значений, представленных в таблице ниже

Символ Описание
‘.’ Точка ( point marker )
‘,’ Пиксель ( pixel marker )
‘o’ Окружность ( circle marker )
‘v’ Треугольник, направленный вниз ( triangle_down marker )
‘^’ Треугольник, направленный вверх( triangle_up marker )
Треугольник, направленный влево ( triangle_left marker )
‘>’ Треугольник, направленный вправо ( triangle_right marker )
‘1’ Треугольник, направленный вниз ( tri_down marker )
‘2’ Треугольник, направленный вверх( tri_up marker )
‘3’ Треугольник, направленный влево ( tri_left marker )
‘4’ Треугольник, направленный вправо ( tri_right marker )
‘s’ Квадрат ( square marker )
‘p’ Пятиугольник ( pentagon marker )
‘*’ Звезда ( star marker )
‘h’ Шестиугольник ( hexagon1 marker )
‘H’ Шестиугольник ( hexagon2 marker )
‘+’ Плюс ( plus marker )
‘x’ Х-образный маркер ( x marker )
‘D’ Ромб ( diamond marker )
‘d’ Ромб ( thin_diamond marker )
‘|’ Вертикальная линия ( vline marker )
‘_’ Горизонтальная линия ( hline marker )

Стиль линии/ Может принимать одно из следующих значений:

Символ Описание
‘-‘ Сплошная линия ( solid line style )
‘–‘ Штриховая линия ( dashed line style )
‘-.’ Штрих-пунктирная линия ( dash-dot line style )
‘:’ Штриховая линия ( dotted line style )

Цвет графика. В рамках аргумента fmt цвет задается значением из следующей таблицы:

Символ Описание
‘b’ Синий
‘g’ Зеленый
‘r’ Красный
‘c’ Бирюзовый
‘m’ Фиолетовый (пурпурный)
‘y’ Желтый
‘k’ Черный
‘w’ Белый

Реализуем возможности plot() на примере:

x = [1, 5, 10, 15, 20] y1 = [1, 7, 3, 5, 11] y2 = [4, 3, 1, 8, 12] plt.figure(figsize=(12, 7)) plt.plot(x, y1, 'o-r', alpha=0.7, label="first", lw=5, mec='b', mew=2, ms=10) plt.plot(x, y2, 'v-.g', label="second", mec='r', lw=2, mew=2, ms=12) plt.legend() plt.grid(True)

Рассмотрим различные варианты использования линейного графика.

Заливка области между графиком и осью

Для заливки областей используется функция fill_between() . Сигнатура функции:

fill_between(x, y1, y2=0, where=None, interpolate=False, step=None, *, data=None, **kwargs)

Основные параметры функции:

  • x : массив длины N
    • Набор данных для оси абсцисс.
    • Набор данных для оси ординат – первая кривая.
    • Набор данных для оси ординат – вторая кривая.
    • Задает заливаемый цветом регион, который определяется координатами x[where] : интервал будет залит между x[i] и x[i+1] , если where[i] и where[i+1] равны True .
    • Определяет шаг, если используется step -функция для отображения графика (будет рассмотрена в одном из следующих уроков).
    • Свойства класса Polygon

    Создадим набор данных для эксперимента:

    import numpy as np x = np.arange(0.0, 5, 0.01) y = np.cos(x*np.pi)

    Отобразим график с заливкой:

    plt.plot(x, y, c = "r") plt.fill_between(x, y)

    plt.plot(x, y, c = "r") plt.fill_between(x, y, where = (y > 0.75) | (y < -0.75))

    Используя параметры y1 и y2 можно формировать более сложные решения.

    Заливка области между 0 и y , при условии, что y >= 0:

    plt.plot(x, y, c = "r") plt.fill_between(x, y, where = (y > 0))

    Заливка области между 0.5 и y , при условии, что y >= 0.5:

    plt.plot(x, y, c = "r") plt.grid() plt.fill_between(x, 0.5, y, where=y>=0.5)

    Заливка область между y и 1:

    plt.plot(x, y, c = "r") plt.grid() plt.fill_between(x, y, 1)

    Вариант двухцветной заливки:

    plt.plot(x, y, c = "r") plt.grid() plt.fill_between(x, y, where=y>=0, color="g", alpha=0.3) plt.fill_between(x, y, where=y
    

    Настройка маркировки графиков

    В начале этого раздела мы приводили пример использования маркеров при отображении графиков. Сделаем это ещё раз, но уже в упрощенном виде:

    x = [1, 2, 3, 4, 5, 6, 7] y = [7, 6, 5, 4, 5, 6, 7] plt.plot(x, y, marker="o", c="g")

    В наборе данных, который создает код:

    import numpy as np x = np.arange(0.0, 5, 0.01) y = np.cos(x*np.pi)

    количество точек составляет 500, поэтому подход, представленный выше уже будет не применим:

    В этой случае нужно задать интервал отображения маркеров, для этого используется параметр markevery , который может принимать одно из следующих значений:

    None – отображаться будет каждая точка;

    N – отображаться будет каждая N -я точка;

    (start, N) – отображается каждая N -я точка начиная с точки start ;

    slice(start, end, N) – отображается каждая N -я точка в интервале от start до end ;

    [i, j, m, n] – будут отображены только точки i, j, m, n .

    Ниже представлен пример, демонстрирующий работу с markevery :

    x = np.arange(0.0, 5, 0.01) y = np.cos(x*np.pi) m_ev_case = [None, 10, (100, 30), slice(100,400,15), [0, 100, 200, 300], [10, 50, 100]] fig, ax = plt.subplots(2, 3, figsize=(10, 7)) axs = [ax[i, j] for i in range(2) for j in range(3)] for i, case in enumerate(m_ev_case): axs[i].set_title(str(case)) axs[i].plot(x, y, "o", ls='-', ms=7, markevery=case)

    Обрезка графика

    Для того, чтобы отобразить только часть графика, которая отвечает определенному условию используйте предварительное маскирование данных с помощью функции masked_where из пакета numpy .

    x = np.arange(0.0, 5, 0.01) y = np.cos(x*np.pi) y_masked = np.ma.masked_where(y < -0.5, y) plt.ylim(-1, 1) plt.plot(x, y_masked, linewidth=3)

    P.S.

    Вводные уроки по “Линейной алгебре на Python” вы можете найти соответствующей странице нашего сайта . Все уроки по этой теме собраны в книге “Линейная алгебра на Python”.

    Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. Для начала вы можете познакомиться с вводными уроками. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.

    Источник

    matplotlib.pyplot.plot#

    The coordinates of the points or line nodes are given by x, y.

    The optional parameter fmt is a convenient way for defining basic formatting like color, marker and linestyle. It's a shortcut string notation described in the Notes section below.

    >>> plot(x, y) # plot x and y using default line style and color >>> plot(x, y, 'bo') # plot x and y using blue circle markers >>> plot(y) # plot y using x as index array 0..N-1 >>> plot(y, 'r+') # ditto, but with red plusses 

    You can use Line2D properties as keyword arguments for more control on the appearance. Line properties and fmt can be mixed. The following two calls yield identical results:

    >>> plot(x, y, 'go--', linewidth=2, markersize=12) >>> plot(x, y, color='green', marker='o', linestyle='dashed', . linewidth=2, markersize=12) 

    When conflicting with fmt, keyword arguments take precedence.

    Plotting labelled data

    There's a convenient way for plotting objects with labelled data (i.e. data that can be accessed by index obj['y'] ). Instead of giving the data in x and y, you can provide the object in the data parameter and just give the labels for x and y:

    >>> plot('xlabel', 'ylabel', data=obj) 

    All indexable objects are supported. This could e.g. be a dict , a pandas.DataFrame or a structured numpy array.

    Plotting multiple sets of data

    There are various ways to plot multiple sets of data.

      The most straight forward way is just to call plot multiple times. Example:

    >>> plot(x1, y1, 'bo') >>> plot(x2, y2, 'go') 
    >>> x = [1, 2, 3] >>> y = np.array([[1, 2], [3, 4], [5, 6]]) >>> plot(x, y) 
    >>> for col in range(y.shape[1]): . plot(x, y[:, col]) 

    By default, each line is assigned a different style specified by a 'style cycle'. The fmt and line property parameters are only necessary if you want explicit deviations from these defaults. Alternatively, you can also change the style cycle using rcParams["axes.prop_cycle"] (default: cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf']) ).

    Parameters : x, y array-like or scalar

    The horizontal / vertical coordinates of the data points. x values are optional and default to range(len(y)) .

    Commonly, these parameters are 1D arrays.

    They can also be scalars, or two-dimensional (in that case, the columns represent separate data sets).

    These arguments cannot be passed as keywords.

    fmt str, optional

    A format string, e.g. 'ro' for red circles. See the Notes section for a full description of the format strings.

    Format strings are just an abbreviation for quickly setting basic line properties. All of these and more can also be controlled by keyword arguments.

    This argument cannot be passed as keyword.

    data indexable object, optional

    An object with labelled data. If given, provide the label names to plot in x and y.

    Technically there's a slight ambiguity in calls where the second label is a valid fmt. plot('n', 'o', data=obj) could be plt(x, y) or plt(y, fmt) . In such cases, the former interpretation is chosen, but a warning is issued. You may suppress the warning by adding an empty format string plot('n', 'o', '', data=obj) .

    A list of lines representing the plotted data.

    Other Parameters : scalex, scaley bool, default: True

    These parameters determine if the view limits are adapted to the data limits. The values are passed on to autoscale_view .

    **kwargs Line2D properties, optional

    kwargs are used to specify properties like a line label (for auto legends), linewidth, antialiasing, marker face color. Example:

    >>> plot([1, 2, 3], [1, 2, 3], 'go-', label='line 1', linewidth=2) >>> plot([1, 2, 3], [1, 4, 9], 'rs', label='line 2') 

    If you specify multiple lines with one plot call, the kwargs apply to all those lines. In case the label object is iterable, each element is used as labels for each set of data.

    Here is a list of available Line2D properties:

    a filter function, which takes a (m, n, 3) float array and a dpi value, and returns a (m, n, 3) array and two offsets from the bottom left corner of the image

    Источник

Оцените статью