Voici une partie de l'intrigue que j'ai

J'ai besoin de créer TrendLine qui serait étendu au 3ème quart de cette intrigue ... Je ne vois aucune solution.

import matplotlib.pyplot as plt
import warnings

warnings.filterwarnings('ignore')

x = [1, 8, 12, 20]
y = [1, 8.4, 12.5, 20]

fig = plt.figure(figsize=(20,20))
ax = fig.add_subplot()
ax.set_xlim(-30, 30)
ax.set_ylim(-20, 20)

plt.subplot().spines['left'].set_position('center')
plt.subplot().spines['bottom'].set_position('center')
plt.plot(x,y, 'b.', ms=20)
plt.minorticks_on()
ax.grid(True, which='both')
mean_line = ax.plot()
z = np.polyfit(x, y, 1)
p = np.poly1d(z)
plt.plot(x,p(x),"r--")

plt.show()
0
Мария Кото 7 oct. 2020 à 09:27

2 réponses

Meilleure réponse

Je ne pense pas que les inversions x et y feraient l'affaire, cela serait limité au poly1d qui passe (0,0) Je pense que la méthode d'extension devrait utiliser la ligne ajustée elle-même.

Donc une méthode plus générale consiste à étendre x et à utiliser poly1d (z) pour calculer une ligne étendue. z est la description de la ligne ajustée, donc fournir une valeur x à z tracerait la ligne.

import matplotlib.pyplot as plt
import numpy as np
import warnings

warnings.filterwarnings('ignore')

x = [1, 8, 12, 20]
y = [1, 8.4, 12.5, 20]

# make an xx that with from -20 to 20
#xx =np.array(x)
#xx = sorted(np.concatenate((-xx, xx), axis=0))
xx = [-20, 20] # also work


fig, ax = plt.subplots(figsize=(10,10))
ax.set_xlim(-30, 30)
ax.set_ylim(-20, 20)

plt.subplot().spines['left'].set_position('center')
plt.subplot().spines['bottom'].set_position('center')
plt.subplot().spines['right'].set_color('none')
plt.subplot().spines['top'].set_color('none')


plt.plot(x,y, 'b.', ms=20)
plt.minorticks_on()
#ax.grid(True, which='both')
plt.subplot().grid(True, which='both')
mean_line = ax.plot()
z = np.polyfit(x, y, 1)
p = np.poly1d(z)

plt.plot(xx,p(xx),"r--")

plt.show()

Si vous zoomez près de (0,0), vous devriez voir qu'il ne dépasse pas le point d'origine.

zoomé près de (0,0)

image de résultat

0
fenixnano 7 oct. 2020 à 10:59

Je n'ai aucune expérience avec les courbes de tendance, mais j'ai créé un composite de valeurs x et y existantes avec des signes différents et j'ai dessiné le graphique suivant.

import matplotlib.pyplot as plt
import warnings

warnings.filterwarnings('ignore')

x = [1, 8, 12, 20]
y = [1, 8.4, 12.5, 20]

fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot()
ax.set_xlim(-30, 30)
ax.set_ylim(-20, 20)

plt.subplot().spines['left'].set_position('center')
plt.subplot().spines['bottom'].set_position('center')
plt.plot(x,y, 'b.', ms=20)
plt.minorticks_on()
ax.grid(True, which='both')
mean_line = ax.plot()

#  update
xx =np.array(x)
xx = sorted(np.concatenate((-xx, xx), axis=0))
yy =np.array(y)
yy = sorted(np.concatenate((-yy, yy), axis=0))

z = np.polyfit(xx, yy, 1)
p = np.poly1d(z)
plt.plot(xx,p(xx),"r--")

plt.show()

enter image description here

0
r-beginners 7 oct. 2020 à 08:11