Matplotlib отображает оси, но не точки данных - PullRequest
0 голосов
/ 18 января 2020

Я пытаюсь построить профиль скорости, используя следующий код. Оси построены, но точки данных не построены.

import pandas as pd
from matplotlib import pyplot as plt

n = 0.4
k = 53
d = 0.000264
r = 0.000132
p = 15000
u = (n/n+1)*(p*1/2*k)**(1/n)*(d**((n+1)/n) - r**((n+1)/n))
plt.plot(u)

График получен: Graph produced

1 Ответ

1 голос
/ 18 января 2020

Прежде всего, обратите внимание, что (p*1/2*k) - очень запутанный способ написать умножение. (Во всех) языках программирования умножения и деления выполняются слева направо, поэтому (p*1/2*k) равно (p*k/2), хотя, возможно, вы имели в виду (p/(2*k)).

Когда строит 2D-график , вы должны думать, что вы хотите в направлении x, а что в направлении y. Поскольку вы даете только x, нечего строить. Кроме того, plot по умолчанию хотят рисовать линии, и для линии необходимы как минимум 2 пары xy. Чтобы нарисовать только точку, plot принимает третий параметр, например, «ro» для представления красной точки. Предположим, что u означает направление y, а у вас нет x, вы можете задать ему ноль:

plt.plot(0, u, 'ro')

Теперь, вероятно, вы хочу нарисовать кривую u для различных значений некоторых x. Поскольку в вашем уравнении нет ни x, ни t, мне трудно узнать, что вы хотели бы видеть в горизонтальном направлении.

Предположим, вы хотите показать u как функция d и значение d изменяется от 0.0 до 0.0005. Как правило, с numpy вы создаете последовательность значений для d, скажем, разделить на 200 небольших интервалов: d = np.linspace(0.0, 0.0005, 200). Затем существует магия numpy, которая, когда вы пишете u = f(d), numpy создает массив для u с таким количеством записей, как d.

Пример:

import numpy as np
from matplotlib import pyplot as plt

n = 0.4
k = 53
d = np.linspace(0.0, 0.0005, 200)  # 0.000264
r = 0.000132
p = 15000
u = (n / n + 1) * (p * 1 / 2 * k) ** (1 / n) * (d ** ((n + 1) / n) - r ** ((n + 1) / n))
plt.plot(d, u)
plt.show()

the plot

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