Как мне ограничить мой график от опускания ниже нуля в matplotlib - PullRequest
0 голосов
/ 16 апреля 2020

Я работал над своим программным проектом для школы. Цель состоит в том, чтобы смоделировать траекторию баллисти c, включая сопротивление ветра, с помощью графика.

Я достиг своей цели и просто хочу добавить некоторые детали. Одна деталь - ограничение графика, поэтому он не go ниже нуля (поскольку нет смысла показывать путь снаряда под землей). Я хочу, чтобы matplotlib прекратил строить график, как только f (x) <0. </p>

Однако я понятия не имею, как это сделать. Я заметил, что я установил диапазон для x, используя x = np.linespace (0, 10000, 500). Если график будет go ниже 0 или выше 10000 по оси X, он будет обрезан в 0 и / или 10000. Как мне сделать то же самое для y?

Вот мой код:

import matplotlib.pyplot as plt
import numpy as np

*bunch of variables*

x = np.linespace(0, 10000, 500)
y = *formula for ballistic trajectory*
y_0 = 0 * x 

*labels and titles*
plt.grid()
plt.xlim(0)
plt.ylim(0)
plt.plot(x, y)
plt.plot(x, y_0, color="black")
plt.show

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Вы должны установить пределы после графика. Не нужно устанавливать максимум, если вы этого не хотите.

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 30, 500)
y = 25 * x - x ** 2 

plt.grid()
plt.plot(x, y)
plt.ylim(0, None) # Or similarly "plt.ylim(0)"
plt.show()

enter image description here

Примечание: Вы также можете установить что-то вроде plt.ylim(0, 170) до сюжет. Но если вы не установите максимум, с помощью plt.ylim(0), максимум все равно будет установлен на значение по умолчанию, равное 1. И в результате вы получите усеченный график. Вот почему вам нужно установить его после графика.

Дополнительный ответ после комментария

К удалить точки данных вместо y<0, Вы можете сделать следующее:

x = x[y>0]
y = y[y>0]
plt.grid()
plt.plot(x, y)
plt.show()
0 голосов
/ 16 апреля 2020

Если вы передадите и нижний, и верхний пределы на plt.ylim(), кривая будет показана только там, где она находится между этими пределами. Сказав это, только установка нижнего предела на ноль, как вы делаете, должна, по крайней мере, убедиться, что отображаемая кривая не go ниже нуля, поэтому я не уверен, что вызывает проблему.

В любом случай, вот полный пример, который работает как задумано:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 30, 500)
y = 25 * x - x ** 2 
y_0 = 0 * x 

plt.grid()
plt.xlim(0, 30)
plt.ylim(0, 160)
plt.plot(x, y)
plt.plot(x, y_0, color="black")

trajectory plot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...