为了账号安全,请及时绑定邮箱和手机立即绑定

在 Python 中绘制曲线

在 Python 中绘制曲线

沧海一幻觉 2021-11-30 16:49:13
我想绘制特定拱形形状的曲线,下面是我使用特定值(需要使用这些值)的距离,但它绘制了直线。我也无法按照我想要的方式格式化 y 轴。这是一个对数刻度,我希望它上升到 1(就像上面的理想图一样)。一些帮助会很棒,谢谢!=)
查看完整描述

2 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

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

这将生成您在纸上绘制的图形。

//img1.sycdn.imooc.com//61a5e5b0000157f305920413.jpg

查看完整回答
反对 回复 2021-11-30
?
忽然笑

TA贡献1806条经验 获得超5个赞

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

//img1.sycdn.imooc.com//61a5e5be0001ae7306460333.jpg

查看完整回答
反对 回复 2021-11-30
  • 2 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信