我尝试使用seaborn绘制一些非对称误差线。我不明白为什么我得到了ValueError: operands could not be broadcast together with shapes (3,1) (2,3)
下面是我的代码:
import numpy as np
import matplotlib.pyplot as plt
truth = np.array([0.15725964, 0.15611989, 0.15820897])
hpd = np.array([[0.00310974, 0.01833195],
[0.00546891, 0.017973 ],
[0.00687474, 0.01628064]])
median = np.array([[0.15517015],[0.12985473],[0.12510344]])
with sns.plotting_context('notebook', font_scale=1.2):
fig, axmatrix = plt.subplots(ncols=2, figsize=(16,8))
for ax in axmatrix.flatten():
ax.set_aspect('equal')
def plot_hpd_err(truth, hpd, median):
err = np.absolute(np.transpose(hpd - median@np.ones((1,2))))
return ax.errorbar(truth[:,np.newaxis], median, yerr=err)
plot_hpd_err(truth, hpd, median)
- 如果我注解掉yerr = err,代码就可以正常运行。
truth[:,np.newaxis]
、median
和err
的形状为(3,1);(3,1)和(2,3)的三种情况。- 我将
err
设置为(2,N)形状,因为axes.errorbar
文档要求我这样做 - 当我转置
truth[:, np.newaxis]
和hpd
以匹配err
的形状时,它抛出了一个错误。
最后,我希望三个数据点具有各自的非对称误差条,但我目前无法获得一个没有任何错误的ErrorbarContainer对象(是的,图目前是空白的...)
1条答案
按热度按时间mlnl4t2r1#
truth
和hpd
的大小必须为(N,);它不能为(N,1)。因此,代码应该为感谢this answer帮我弄明白了这一点。