Я не уверен, что именно ты хочешь делать. Может, как-то так? Что касается кривых уровня достоверности 95%, вы можете посмотреть здесь Как построить доверительный интервал в Python? .
import matplotlib.pyplot as plt
import numpy as np
if __name__ == '__main__':
fig = plt.figure()
x = np.array([100,65,20,85])
y = np.array([1,0.75,1.25,2])
Error_x = np.array([5,3,2,5])
Error_y = np.array([0.1,0.03,0.01,0])
labels = ['A', 'B', 'C', 'D']
symbols = ['v', '^', '<', '>']
for i in range(0, len(x)):
plt.scatter(x[i], y[i], marker=symbols[i], s=70)
plt.errorbar(x[i], y[i], xerr=Error_x[i], c='black')
plt.errorbar(x[i], y[i], yerr=Error_y[i], c='black')
z = np.polyfit(x.flatten(), y.flatten(), 1)
p = np.poly1d(z)
plt.plot(x,p(x),"r--")
ci = 0.95 * np.std(y)/np.mean(y)
ax.fill_between(sorted(x), p(x)-ci, p(x)+ci, color='b', alpha=.4)
for l in range(0, len(labels)):
plt.text(x[l], y[l] + 0.03, labels[l])
plt.grid()
plt.tight_layout()
plt.savefig("test.png")
plt.show()
