【问题标题】:Matplotlib displaying axes but not datapointsMatplotlib 显示轴但不显示数据点
【发布时间】:2020-05-05 03:22:52
【问题描述】:

我正在尝试使用以下代码绘制速度曲线。绘制了坐标轴,但没有绘制数据点。

import pandas as pd
from matplotlib import pyplot as plt

n = 0.4
k = 53
d = 0.000264
r = 0.000132
p = 15000
u = (n/n+1)*(p*1/2*k)**(1/n)*(d**((n+1)/n) - r**((n+1)/n))
plt.plot(u)

生成的图表:

【问题讨论】:

  • u 包含一个数字。它不会以您绘制的方式显示。尝试使用标记 plt.plot(u, 'o') 将其可视化。 plt.plot 默认使用至少需要两个点的线

标签: python python-3.x pandas matplotlib jupyter-notebook


【解决方案1】:

首先,请注意(p*1/2*k) 是一种非常令人困惑的乘法编写方式。在(几乎所有)编程语言中,乘法和除法是从左到右完成的,所以,(p*1/2*k) 等于 (p*k/2),而您的意思可能是 (p/(2*k))

plotting a 2D graph时,你要考虑x方向你想要什么,y方向你想要什么。由于您只提供x,因此没有什么可绘制的。此外,plot 默认要绘制线条,并且线条至少需要 2 个 xy 对。为了只绘制一个点,plot 接受第三个参数,例如 'ro' 来表示一个红点。假设uy 方向而你没有x,你可以给它一个零:

plt.plot(0, u, 'ro')

现在,您可能想为某些x 的不同值绘制一条u 曲线。在你的等式中没有x 也没有t,我很难知道你想在水平方向看到什么。

假设您想将u 显示为d 的函数,并且d0.0 变为0.0005。通常,使用 numpy 可以为 d 创建一个 sequence of values,可以说分成 200 个小区间:d = np.linspace(0.0, 0.0005, 200)。然后是magick of numpy,当您编写u = f(d) 时,numpy 会为u 创建一个数组,其中包含与d 一样多的条目。

例子:

import numpy as np
from matplotlib import pyplot as plt

n = 0.4
k = 53
d = np.linspace(0.0, 0.0005, 200)  # 0.000264
r = 0.000132
p = 15000
u = (n / n + 1) * (p * 1 / 2 * k) ** (1 / n) * (d ** ((n + 1) / n) - r ** ((n + 1) / n))
plt.plot(d, u)
plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 2014-10-30
    相关资源
    最近更新 更多