我正在 pymc3 中进行一些贝叶斯建模,并想使用 plot_posterior (来自 arviz 包)绘制后验分布。生成的图在水平轴上笨拙地错位,我想将它移到精确地绘制在 -3 和 +3 之间。不幸的是,我无法计算出我应该传递给函数以指定它的内容。
arviz.plot_posterior 的文档指定参数“coords”具有定义“要绘制的 var_names 的坐标。传递给 Dataset.sel”大概这是我需要指定水平轴范围的内容,但它没有说明我期望什么样的价值。
我已经检查了 Dataset.sel 的文档,它指出它期望的第一个参数是“一个 dict,其键与标量、切片或刻度标签数组给出的维度和值相匹配。” 我对此的解释是,键是与变量名称匹配的字符串,而值是刻度线的一些可迭代结构。
我的变量名为“m”,由以下代码生成:
with pymc3.Model() as m1:
m = pymc3.Normal('m', mu = 0, sigma = 1)
obs = pymc3.Normal('obs', mu = m, sigma = 1, observed = numpy.random.randn(3))
trace = pymc3.sample(1000, tune = 500, cores = 1)
我对 plot_postterior 的猜测是这样的:
plot_posterior(trace, coords = {'m': [-3.0, -2,0, -1,0, 0.0, 1.0, 2.0, 3.0]})
它给了我错误“ValueError:维度或多索引级别 ['m'] 不存在”
大概我走在正确的轨道上,但我无法更准确地定义该函数需要哪些参数。感谢您的任何帮助,您可以提供。
编辑:我已经弄清楚如何扩展轴本身(诀窍是 ax = mpl.pyplot.axes(xlim = (-3.0, 3.0)))但我仍然不知道如何扩展变量的绘图本身。