Построение диаграммы разброса с полосами погрешностей в направлениях x и y и добавление линии тренда - PullRequest
0 голосов
/ 29 мая 2020

У меня есть набор разрозненных данных, которые я хотел бы построить и добавить линию наилучшего соответствия (y = ax + b) и представить уравнение с соответствующей ошибкой (возможно, R) и показать кривые уровня достоверности 95%. Более того, каждая точка (x, y) имеет имя, которое должно появиться в легенде, желательно, чтобы каждая точка имела разную форму. Может ли кто-нибудь помочь мне с этим?

x=np.array([100,65,20,85])
xerr=np.array([5,3,2,5])
y=np.array([1,0.75,1.25,2])
yerr=np.array([0.1,0.03,0.01,0])

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Я не уверен, что именно ты хочешь делать. Может, как-то так? Что касается кривых уровня достоверности 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()

enter image description here

0 голосов
/ 29 мая 2020

Отвечая на мой вопрос, я знаю очень много кода, но я хочу добавить 95% доверительные границы, а также ошибку, связанную с уравнением линии тренда, на том же графике!

x=np.array([100,65,20,85])
xerr=np.array([5,3,2,5])
y=np.array([1,0.75,1.25,2])
yerr=np.array([0.1,0.03,0.01,0])


fig, ax = plt.subplots()


ax.errorbar(x, y,
            xerr=xerr,
            yerr=yerr,
            fmt='o')


ax.set_xlabel('X axis')
ax.set_ylabel('Y axis')
ax.set_title('Test Code')


z = np.polyfit(x.flatten(), y.flatten(), 1)
p = np.poly1d(z)
plt.plot(x,p(x),"r--")
plt.title("y=%.6fx+%.6f"%(z[0],z[1])) 

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