我已经在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)
答案 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设置为一个较小的值。