将直方图和1 std带添加到残差图

时间:2019-12-07 18:08:54

标签: python matplotlib plot graph

我已经在python中绘制了带有残差子图的图形,并试图找到一种在直方图图的末端绘制残差的直方图的方法。我还想在残差图上添加一条灰色带,显示1个标准偏差。

还有一种方法可以删除该图的顶部和右侧边界。

这是我当前拥有的代码和图形的副本。

fig1 = pyplot.figure(figsize =(9.6,7.2))
plt.frame1 =fig1.add_axes((0.2,0.4,.75,.6))
pyplot.errorbar(xval, yval*1000, yerr=yerr*1000, xerr=xerr, marker='x', linestyle='None')

# Axis labels
pyplot.xlabel('Height (m)', fontsize = 12)
pyplot.ylabel('dM/dt (g $s^{-1}$)', fontsize = 12)


# Generate best fit line using model function and best fit parameters, and add to plot
fit_line=model_funct(xval, [a_soln, b_soln])
pyplot.plot(xval, fit_line*1000)

# Set suitable axis limits: you will probably need to change these...
#pyplot.xlim(-1, 61)
#pyplot.ylim(65, 105)
# pyplot.show()


plt.frame2 = fig1.add_axes((0.2,0.2,.75,.2))    #start frame1 at 0.2, 0.4 
plt.xlabel("Height of Water (m)", fontsize = 12)
plt.ylabel("Normalised\nResiduals", fontsize = 12)    #\n is used to start a new line
plt.plot(h,normalised_residuals,"x", color = "green")
plt.axhline(0, linewidth=1, linestyle="--", color="black")


plt.savefig("Final Graph.png", dpi = 500)

Current graph

1 个答案:

答案 0 :(得分:1)

您的代码命名有点怪异,因此我仅发布摘要,因为我自己很难尝试。有时您使用pyplot,有时您使用plt,这应该是相同的。另外,您应该像这样ax = fig1.add_axes((0.2,0.4,.75,.6))命名轴。然后,如果您进行绘图,则应直接使用轴进行调用,即使用ax.errorbar()

要在顶部图中隐藏轴的边界,请使用:

ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.yaxis.set_ticks_position('left')
ax.xaxis.set_ticks_position('bottom')

在底部绘图中添加误差带非常容易。只需使用np.mean()np.std()计算平均值和标准偏差。然后,致电

plt.fill_between(h, y1=np.mean(normalised_residuals) - np.std(normalised_residuals), 
                 y2=np.mean(normalised_residuals) + np.std(normalised_residuals),
                 color='gray', alpha=.5)

并根据需要更改颜色和Alpha。

对于直方图投影,您只需像之前做过两次一样添加另一个轴即可(假设它被称为ax)并调用

ax.hist(normalised_residuals, bins=8, orientation="horizontal")

在这里,可能由于您没有那么多数据点而将bins设置为一个较小的值。