【问题标题】:Plotting a scatter data with error bars in x and y direction and adding a trend line在 x 和 y 方向绘制带有误差线的散点数据并添加趋势线
【发布时间】:2020-09-16 08:32:23
【问题描述】:

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

【问题讨论】:

    标签: python


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我不确定你到底想做什么。也许,像这样的东西?关于 95% 置信水平曲线,可以看这里How to plot confidence interval in 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()
      

      【讨论】:

      • 这是我几乎想要做的,但线的方程以及最佳拟合的误差也应该显示出来。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 2021-07-04
      • 2017-05-28
      • 1970-01-01
      • 2014-12-14
      • 2016-02-06
      • 2018-09-20
      相关资源
      最近更新 更多