我已经运行了MCMC链进行参数估计,并获得了可接受的参数值。我有3个参数,每个参数约有30万个接受值。
我现在想绘制一个等高线图(可行),但是使用3选2三角矩阵类型(非常具体的要求),请参阅所附的照片contour-plot。该图显示了论文中一些无关的轮廓图,但我想为参数设置相似的图。
总共,我将有6个图:3个单参数直方图(如图像中每列的顶部图)和3选择2 = 3个轮廓图(作为下三角形)。再次,我需要它看起来尽可能像图像。
如何在Python上实现这一目标?
更新:
我已经能够编写以下代码,使我得到一个my-plot-here的图。
但是,我需要与数字1的类型完全匹配/尽可能匹配。例如,我需要我的xticks,yticks显示内部而不是外部,要消除雕像之间的空间,显示左侧垂直图标签的更好方法(我目前正在使用set_ylabel),消除外部弯曲轮廓线水平,并且在pdf的x轴上有详细的(长短)刻度线。
def plot_histogram_fig(param, nbins, subplot_index, subplot_title):
counts, bins = np.histogram(param, bins = nbins)
plotcounts = np.insert(counts, -1, counts[-1])
bincentres = (bins[:-1] + bins[1:])/2
ax = fig.add_subplot(3, 3, subplot_index)
#ax.step(bins, plotcounts, where='post', c='y')
ax.plot(bincentres, counts, 'b')
#ax.plot([bins[np.argmax(counts)], bins[np.argmax(counts)]], [0, np.max(counts)], 'y')
ax.set_yticks([])
return [ax, counts, bincentres]
def plot_contour_fig(p1, p2, nbins, subplot_index):
H, xedges, yedges = np.histogram2d(p1, p2, bins = nbins)
Z = H.T
#Z_gauss = scipy.ndimage.gaussian_filter(Z, sigma = 0.8, order = 0) #filtering
X, Y = np.meshgrid(xedges[:-1], yedges[:-1])
ax = fig.add_subplot(3, 3, subplot_index)
im = ax.contour(X, Y, Z, levels = 6)
#plt.colorbar(im, ax = ax)
ax.clabel(im, inline=True, fontsize=4)
return [ax, H, xedges, yedges]
nbins = 50
fig = plt.figure(figsize = (10, 6))
#Histograms
ax1 = plot_histogram_fig(all_alphas, nbins, 1, subplot_title = 'alpha')
ax1[0].set_xticks([])
ax1[0].set_ylabel('alpha')
ax5 = plot_histogram_fig(all_betas, nbins, 5, subplot_title = 'beta')
ax5[0].set_xticks([])
ax9 = plot_histogram_fig(all_gammas, nbins, 9, subplot_title = 'gamma')
ax9[0].set_title('gamma', y = -0.5)
#Contours
ax4 = plot_contour_fig(all_alphas, all_betas, nbins, 4)
ax4[0].set_xticklabels([])
ax4[0].set_ylabel('beta')
ax7 = plot_contour_fig(all_alphas, all_gammas, nbins, 7)
ax7[0].set_title('alpha', y = -0.5)
ax7[0].set_ylabel('gamma')
ax8 = plot_contour_fig(all_betas, all_gammas, nbins, 8)
ax8[0].set_yticklabels([])
ax8[0].set_title('beta', y = -0.5)
plt.show()
all_alphas,all_betas和all_gammas是一维numpy数组,用于存储接受的参数值。