【发布时间】:2019-07-01 03:25:13
【问题描述】:
我有一个相关图,我试图在对数刻度中显示值。我试图在相关图上显示最佳拟合线。
以下是我的代码。
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from scipy import stats
def loglogplot(seed):
mpl.rcParams.update({'font.size': 10})
figh, figw = 1.80118*2, 1.80118*2
fig, axes = plt.subplots(1, 1, figsize=(figh, figw))
axes.set_xscale('log')
axes.set_yscale('log')
np.random.seed(seed)
x = 10 ** np.random.uniform(-3, 3, size=1000*4)
y = x * 10 ** np.random.uniform(-1, 1, size=1000*4)
axes.scatter(x, y, color='black', s=10, alpha=0.1)
logx = np.log10(x)
logy = np.log10(y)
slope, intercept, r_value, p_value, std_err = stats.linregress(logx, logy)
xps = np.arange(10**-4, 10**4, 1)
axes.plot(xps, slope * xps + intercept, color='red', lw=2)
axes.set_xlim((10**-4, 10**4))
axes.set_ylim((10**-4, 10**4))
plt.show()
当使用loglogplot(seed=5) 运行时,我得到以下图像。
当使用loglogplot(seed=10) 运行时,我得到以下图像。
我很困惑,为什么回归线在 x=1 之前没有绘制为直线。我做错了什么?
编辑:将xps = np.arange(10**-4, 10**4, 1)改成xps = np.logspace(-4, 4, 1000),结果在质量上也好不到哪里去。
Seed = 5 给出:
种子 = 10 给出:
【问题讨论】:
-
尝试使用
np.logspace(-4,4,N)而不是np.arange生成xps。 -
试过了,但没有多大帮助。检查问题中的编辑以获取由更改产生的图像。
-
您需要将最适合的参数转换回其原始单位
-
对不起,你能告诉我我应该在哪里做吗?我想我在对数转换空间本身中绘制所有内容,并且事情或多或少是相同的。
-
slope * xps + intercept不在日志空间中执行
标签: python numpy matplotlib plot regression