Как мне построить красивый точечный график с линейной регрессией?

#python #pandas #matplotlib #seaborn #python-ggplot

#python #pandas #matplotlib #сиборн #python-ggplot

Вопрос:

Я хочу создать красивую линию scatter plot with linear regression , используя данные, приведенные ниже. Я смог создать точечный график, но не удовлетворен тем, как он выглядит. Кроме того, я хочу построить linear regression линию на данных.

Мои данные и код приведены ниже:

 x            y
117.00      111.0
107.00      110.0
77.22        78.0
112.00       95.4
149.00      150.0
121.00      121.0
121.61      120.0
111.54      140.0
73.00        72.0
70.47       000.0
66.3         72.0
113.00      131.0
81.00        81.0
72.00        00.0
74.20        98.0
84.24        90.0
86.60        88.0
99.00        97.0
90.00       102.0
85.00       000.0
138.0       135.0
96.00        93.0

import numpy as np
import matplotlib.pyplot as plt
print(plt.style.available)
from sklearn.linear_model import LinearRegression
plt.style.use('ggplot')

data = np.loadtxt('test_data',  dtype=float, skiprows=1,usecols=(0,1))

x=data[:,0]
y=data[:,1]
plt.xlim(20,200)
plt.ylim(20,200)

plt.scatter(x,y, marker="o",)
plt.show()
  

Комментарии:

1. Помимо части о добавлении линейной регрессии, это довольно субъективный вопрос. В конце концов, красота в глазах смотрящего. Вы не говорите, что не так с графиком, который вы можете создать, и что вы хотели бы улучшить

2. Вы должны более четко указать, что вы считаете «красивым». Это очень субъективно.

Ответ №1:

Пожалуйста, проверьте фрагмент. Вы можете использовать numpy.polyfit() со степенью = 1 для вычисления наклона и y-пересечения линии, чтобы y=m*x c
График

 import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot')
data = np.loadtxt('test_data.txt',  dtype=float, skiprows=1,usecols=(0,1))
x=data[:,0]
y=data[:,1]

plt.xlim(20,200)
plt.ylim(20,200)

plt.scatter(x,y, marker="o",)

m, b = np.polyfit(x, y, 1)
plt.plot(x, m*x   b)

plt.show()
  

Правка1:
Основываясь на вашем комментарии, я добавил больше точек, и теперь график выглядит так, и кажется, что он проходит через точки.

Чтобы установить прозрачность для точек, вы можете использовать alpha аргумент . Вы можете установить диапазон от 0 до 1, чтобы изменить прозрачность. Здесь я устанавливаю alpha=0.5

plt.scatter(x,y, marker="o",alpha=0.5)
прозрачный
Правка2: на основе предложения @tmdavison график2

 import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot')
data = np.loadtxt('test_data.txt',  dtype=float, skiprows=1,usecols=(0,1))
x=data[:,0]
y=data[:,1]
x2 = np.arange(0, 200)
plt.xlim(20,200)
plt.ylim(20,200)

plt.scatter(x,y, marker="o",)

m, b = np.polyfit(x, y, 1)
plt.plot(x2, m*x2   b)

plt.show()
  

Комментарии:

1. возможно ли вручную сдвинуть линию линейной регрессии,,,когда я добавляю больше данных, строка не проходит через точки…

2. Линия будет проходить через точки только потому, что линия зависит от массива x и y @sion, поэтому наклон вычисляется правильно, который должен проходить через точки.

3. в любом случае мне нужно построить прозрачный круг вместо сплошного круга … можно ли это сделать @Karthik

4. если вы создаете независимый x массив для использования при построении регрессии, вы можете определить его так, чтобы у него были начальные и конечные точки, которые не ограничены диапазоном данных

5. @KARTIK хорошо … все в порядке, но мне нужно передать линию регрессии из источника (0,0)….