这里我需要绘制一个频率和一个斜率为-5/3的简单直线。
问题是,主要的情节是使用plt.loglog(),当我想显示行时,它没有给我任何东西或奇怪的东西。
这是它的照片。我已经画好了右边的那个,而我想要的是左边的那个。

我已经使用了np.linspace和其他一些东西,但是我无法解决这个问题。此外,还不清楚在哪个点,我有频率图的第一个和结束。这也是我不能使用“np.linspace”的另一个原因。有谁可以帮我?
发布于 2020-05-10 17:09:47
非常感谢你的关注。我试过了你的代码,但我发现也许有更好的方法来处理我的数据集。所以我做了这个:
np.array(),并在其上具有np.log()函数:x = ... # type(x) = list
y = ... # type(y) = list
.
.
.
x = np.log(np.array(x))
y = np.log(np.array(y))在这种情况下,我不再需要在计算中使用plt.loglog()或np.log()和np.exp()。
ymin, ymax = ([y.min(), y.max()])
ymid = (ymin + ymax) / 2
xmin, xmax = ([x.min(), x.max()])
xmid = (xmin + xmax) / 2np.linspace()作为rest:slope = - 5 / 3
x1 = np.linspace(xmin, xmax)
y1 = slope * (x1 - xmid) + ymid
ax.plot(x1, y1, 'r')得到了我想要的结果。
编辑:原版的地块。
因此,最好在频谱中使用plt.loglog()图,我编辑了以下内容:
np.array()x = array(...)
y = array(...)np.exp()绘制这条线。ymin, ymax = log([y.min(), y.max()])
ymid = (ymin + ymax) / 2
xmin, xmax = log([x.min(), x.max()])
xmid = (xmin + xmax) / 2
slope = - 5 / 3
y1 = slope * (xmin - xmid) + ymid
y2 = slope * (xmax - xmid) + ymid
ax.plot(exp([xmin, xmax]), exp([y1, y2]), 'r')
plt.loglog()正如你现在所看到的,我们有了原状的地块。
发布于 2020-05-10 14:09:20
这是一种可能的方法。所有的计算都发生在日志空间。将点转换回线性空间进行绘制。当matplotlib绘制一条直线时,给定的两点总是一样的直线,独立于轴的变换,只需要两个点。
步骤:
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(figsize=(8, 8))
# first create some toy data roughly resembling the example plot
x = np.linspace(10, 2000, 1000)
y = np.random.normal(2000 / x ** np.linspace(.7, .55, x.size), 100 / x ** .7)
ax.plot(x, y)
y0, y1 = np.log([y.min(), y.max()])
# mid_x, mid_y = np.log([x[x.size // 2], y[y.size // 2]])
mid_x, mid_y = (np.log(x.min()) + np.log(x.max())) / 2, (y0 + y1) / 2
slope = -5 / 3
x0 = mid_x + slope * (y0 - mid_y)
x1 = mid_x + slope * (y1 - mid_y)
ax.plot(np.exp([x0, x1]), np.exp([y0, y1]), color='crimson')
plt.loglog()
plt.show()

https://stackoverflow.com/questions/61710306
复制相似问题