在Python中绘制曲线

时间:2019-03-08 16:34:12

标签: python python-3.x numpy matplotlib

我想绘制特定形状的弧形曲线,以下是使用特定值(需要使用这些值)的距离,但它绘制了直线。

我也无法按我想要的方式格式化y轴。这是一个对数刻度,我希望将其提高到1(如上面的理想图所示)。一些帮助将是巨大的,谢谢! =)

2 个答案:

答案 0 :(得分:2)

您的线没有在对数刻度图上延伸的原因是因为顶部和底部的点之间没有点。 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 :(得分:1)

您可以使用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