Построение кривых линий в Python - PullRequest
3 голосов
/ 08 марта 2019

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

У меня также возникают проблемы с форматированием оси Y так, как я хочу. Это логарифмическая шкала, и я бы хотел, чтобы она доходила до 1 (как на идеальном графике выше). Некоторая помощь была бы отличной, спасибо! =)

Ответы [ 2 ]

2 голосов
/ 08 марта 2019

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

Чтобы изменить это, мы добавляем больше точек между точками.и результат станет изогнутым.

import matplotlib
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import ScalarFormatter

# Data for plotting
t = [0.0, 62.5, 125.0, 187.5, 250, 312.5, 375, 437.5, 500]
s = [0.1, 0.005, 0.1, 0.005, 0.1, 0.005, 0.1, 0.005, 0.1]

def extendlist(l):
    master = []
    for i in range(len(l)-1):
        x = np.linspace(l[i], l[i+1], 50)
        master.extend(x)
    return master

t = extendlist(t)
s = extendlist(s)

fig, ax = plt.subplots()
ax.semilogy(t, s)

ax.set(xlabel='x axis', ylabel='y axis', title='Stuff')
plt.xlim((0,500))
plt.ylim((0.001, 1))

plt.show()

Это сгенерирует то, что вы нарисовали на бумаге.

enter image description here

1 голос
/ 08 марта 2019

вы можете использовать interp1d

import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate import interp1d

t = [0.0, 62.5, 125.0, 187.5, 250, 312.5, 375, 437.5, 500]
s = [0.1, 0.005, 0.1, 0.005, 0.1, 0.005, 0.1, 0.005, 0.1]
tnew = np.linspace(0, 500, num=1001, endpoint=True)
f = interp1d(t, s)
plt.semilogy(tnew, f(tnew))
plt.ylim((0.001, 1))
plt.show()

resulting plot

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