Лучше всего подходит линия полулога с линейной осью Y и логарифмом X - PullRequest
0 голосов
/ 21 февраля 2019

Мой вопрос тесно связан со следующей темой о SO: Подгонка прямой линии в полулогарифмическом масштабе с помощью Matplotlib

Однако я хочу создать линию наилучшего соответствия на графикегде ось X является логарифмической, а ось Y линейной.

import matplotlib.pyplot as plt
import numpy as np

plt.scatter(players['AB'], players['Average'], c='black', alpha=0.5)

p = np.polyfit(players['AB'], players['Average'], 1)
plt.plot(players['AB'], p[0] + p[1] * np.log(players['AB']), color='r', linestyle='dashed', alpha=0.7)

plt.xscale('log')
plt.xlim(1, 25000)
plt.ylim(-0.05, 0.60)
plt.xlabel('Number of at-bats (AB)')
plt.ylabel('Batting Average')
plt.show()

Это дает мне следующее:

enter image description here

Что я делаю неправильно?Спасибо

РЕДАКТИРОВАТЬ

  p = np.polyfit(np.log(players['AB']), players['Average'], 1)
  plt.plot(players['AB'], p[0] + p[1] * np.log(players['AB']), color='r', linestyle='dashed', alpha=0.7)

Это все равно дает мне неправильное наилучшее соответствие: enter image description here

1 Ответ

0 голосов
/ 22 февраля 2019

Я полагаю, вам нужно сделать

p = np.polyfit(np.log(players['AB']), players['Average'], 1)
plt.plot(players['AB'], p[0] * np.log(players['AB']) + p[1])

Это даст вам линейное полиномиальное соответствие при построении в полулогарифмическом пространстве по оси x.Вот полный пример, демонстрирующий это

import matplotlib.pyplot
import numpy as np

n = 100
np.random.seed(1)
x = np.linspace(1,10000,n)
y = np.zeros(n)
rand = np.random.randn(n)
for ii in range(1,n):
    x[ii] = 10**(float(ii)/10.0)      # Create semi-log linear data
    y[ii] = rand[ii]*10 + float(ii)   # with some noise in the y values

plt.scatter(x,y)
p = np.polyfit(np.log(x), y, 1)
plt.semilogx(x, p[0] * np.log(x) + p[1], 'g--')

plt.xscale('log')

plt.show()

. Для сгенерированных данных примера это дает

Semilogx linear polyfit

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...