Создание сюжета с двумя строками - PullRequest
2 голосов
/ 12 февраля 2020

Я пытаюсь сделать кусочек мудрого сюжета из 1/(1+25x^2), разрезанного на десять кусочков. У меня есть две строки, которые являются правильными, они дают мне значения x и f(x) от -1 до 1.

n = 10
#generating a x set
mylistx = []

for x in range(0, n):
    u = ((2/(n)) * (x+1))-1
    mylistx.append(str(u))
print (mylistx)

#generating y values
mylisty = []
for x in range(0, n):
    u = ((2/(n)) * (x+1))-1
    p = (1/(1+25*(u**2)))
    mylisty.append(str(p))
print (mylisty)

Выходные строки:

['-0.8', '-0.6', '-0.4', '-0.2', '0.0', '0.2', '0.4', '0.6', '0.8', '1.0']
['0.058', '0.1', '0.2', '0.5', '1.0', '0.5', '0.2', '0.1', '0.0588', '0.038464']

Но когда я построите их, используя следующий код:

import matplotlib.pyplot as plt
plt.plot(mylistx, mylisty, label='(1+25x^2)^-1')
plt.show()

Это запутано и начинает строить их не по порядку, и все. Это всего две строки длиной 10 ячеек. Почему он печатает их не по порядку и соединяет только 4 точки?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

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

mylistx.append(u)

mylisty.append(p)

Тем не менее, если вам интересно, как можно заставить работать ваше решение, вы можете map списки строк в float введите и затем нанесите их как

plt.plot(list(map(float, mylistx)), list(map(float, mylisty)), '-bo', label='(1+25x^2)^-1')

Оба приведенных выше решения сгенерируют следующий график:

enter image description here

0 голосов
/ 12 февраля 2020

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

Также обратите внимание, что при использовании numpy все можно написать довольно кратко. np.linspace(-1, 1, 1000) создает массив с 1000 x-значениями в диапазоне от -1 до 1. И с помощью волхвов c из векторизация , просто запись 1 / (1 + 25 * (x ** 2)) создает массив со значениями функций.

Некоторый код для начала работы:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1, 1, 1000)
plt.plot(x, 1 / (1 + 25 * (x ** 2)), label='$(1+25x^2)^{-1}$')
plt.legend()
plt.show()

example plot

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