3个参数的矩阵轮廓图

时间:2020-04-07 12:23:39

标签: python plot contour contourf data-representation

我已经运行了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数组,用于存储接受的参数值。

0 个答案:

没有答案