【问题标题】:Plotting Curved Lines in Python在 Python 中绘制曲线
【发布时间】:2019-03-08 16:34:12
【问题描述】:

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

我也无法按照我想要的方式格式化 y 轴。这是一个对数刻度,我希望它达到 1(就像上面的理想图一样)。一些帮助会很棒,谢谢! =)

【问题讨论】:

  • 让我猜猜 - 您想要的曲线形状是基于线性插值基础值,然后将这些插值绘制在对数轴上?

标签: python python-3.x numpy matplotlib


【解决方案1】:

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

这将生成您在纸上绘制的内容。

【讨论】:

    【解决方案2】:

    你可以使用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()
    

    【讨论】:

    • 您是否忘记了代码中的某些内容? f 是什么,interp 在哪里使用?
    猜你喜欢
    • 2011-05-25
    • 2017-09-11
    • 2017-09-04
    • 1970-01-01
    • 2020-11-27
    • 2021-05-25
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多