Не совсем уверен, что вы хотите из-за плохого объяснения, но я постараюсь помочь вам, используя plt.semilogy()
и кривую подгонку. Вы можете попробовать с plt.semilogy(x,y)
и посмотреть, что вы получите, но в этом решении я хотел подогнать кривую, так что вот отредактированный код, надеюсь, он поможет вам или поможет решить вашу проблему:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import statistics as st
import scipy as sp
from scipy.optimize import curve_fit
y1 = [6,5,6,7,8]
y2 = [8,9,10,10,11]
y3 = [14,15,16,14,14]
y4 = [16,17,18,19,18]
y1_mean = statistics.mean(y1)
y2_mean = statistics.mean(y2)
y3_mean = statistics.mean(y3)
y4_mean = statistics.mean(y4)
y = np.array([y1_mean, y2_mean, y3_mean, y4_mean])
x = np.array([3,5,6,8])
e = np.array([st.stdev(y1), st.stdev(y2), st.stdev(y3), st.stdev(y4)])
def f(x,a,b,c):
return a*(np.square(x))+(b*x)+c
popt, pcov = curve_fit(f, x, y)
fitA = popt[0]
fitB = popt[1]
fitC = popt[0]
yFit = f(x,fitA,fitB,fitC)
plt.errorbar(x, y, e, linestyle = 'none', color = 'k', label="Points" )
plt.semilogy(x,y, color='g', linestyle="--", label="Log")
plt.semilogy(x,yFit,color='r', label="Log Fit")
plt.scatter(x, y, color = 'k')
plt.xlabel('x-coordinates')
plt.ylabel('y-coordinates')
plt.title('Sample graph')
plt.legend()
plt.show()
И вот что я получаю
