Python 在x和y方向绘制带有误差条的散布数据并添加趋势线

Python 在x和y方向绘制带有误差条的散布数据并添加趋势线,python,Python,我有一堆分散的数据,我想绘制并添加一条最佳拟合线(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]) 回答我的问题,我知道这么多的代码,但我想添加9

我有一堆分散的数据,我想绘制并添加一条最佳拟合线(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])

回答我的问题,我知道这么多的代码,但我想添加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()

我不知道你到底想做什么。也许,像这样的?关于95%置信水平曲线,您可以在这里查看

导入matplotlib.pyplot作为plt
将numpy作为np导入
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
图=plt.图()
x=np.数组([100,65,20,85])
y=np.数组([1,0.75,1.25,2])
错误_x=np.数组([5,3,2,5])
错误_y=np.数组([0.1,0.03,0.01,0])
标签=['A','B','C','D']
符号=['v','^','']
对于范围(0,len(x))中的i:
plt.散射(x[i],y[i],标记=符号[i],s=70)
plt.errorbar(x[i],y[i],xerr=Error\ux[i],c='black')
plt.errorbar(x[i],y[i],yerr=Error\u y[i],c='black')
z=np.polyfit(x.flatte(),y.flatte(),1)
p=np.poly1d(z)
plt.绘图(x,p(x),“r-”)
ci=0.95*np.标准值(y)/np.平均值(y)
(排序(x),p(x)-ci,p(x)+ci,color='b',alpha=.4)之间的最大填充
对于范围(0,长度(标签))中的l:
plt.text(x[l],y[l]+0.03,标签[l])
plt.grid()
plt.紧_布局()
plt.savefig(“test.png”)
plt.show()

这是我几乎想要做的,但也应该显示直线方程以及最佳拟合的误差。
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()