Python-код с циклом for, который не работал - PullRequest
0 голосов
/ 19 апреля 2019

Я запустил следующий код, но он показал пустой график, на котором ничего не написано, и я не могу знать причину Пожалуйста, помогите

import matplotlib.pyplot as plt
import math
for xx in range(10,100000,1000):
    plt.plot(xx,math.sqrt((.30*(1-.3))/(xx-1)))

Ответы [ 2 ]

3 голосов
/ 19 апреля 2019

Если вы пытаетесь построить каждую точку по отдельности, попробуйте использовать plt.scatter(), например:

for xx in range(10,100000,1000):
    plt.scatter(xx, math.sqrt((.30*(1-.3))/(xx-1)))

Если вы хотите построить непрерывную линию, вам нужно заранее создать векторы, а затем передать их на plt.plot(). Я предлагаю использовать numpy, поскольку np.array s может обрабатывать векторизованные данные

import numpy as np
# Make x vector
xx = np.arange(10,100000,1000)
# Make y
y = np.sqrt((.30*(1-.3))/(xx-1))
# Plot
plt.plot(xx, y)
0 голосов
/ 19 апреля 2019

Хотя другой ответ решает проблему, вы должны знать, что ваша попытка не была полностью ошибочной.Вы можете использовать plt.plot для построения отдельных точек в цикле for.Тем не менее, вам придется указать маркер в этом случае.Это можно сделать, используя, скажем, синюю точку, используя bo как

for xx in range(10,100000,1000):
    plt.plot(xx,math.sqrt((.30*(1-.3))/(xx-1)), 'bo')

В качестве альтернативы, в дополнение к другому ответу, вы можете просто использовать plt.scatter даже для всего массива, как показано ниже.Обратите внимание, что в этом случае вам придется использовать модуль sqrt от NumPy, так как вы выполняете здесь векторизованную операцию, что невозможно с math.sqrt

xx = np.arange(10,100000,1000)
plt.scatter(xx,np.sqrt((.30*(1-.3))/(xx-1)), c='green', edgecolor='k')

enter image description here

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