使用matplotlib绘制带有xerr和yerr的散点图

10

我想要将两个数组的位置关系可视化。我的表格如下:

    Number          Description      value_1  value_2  err_1 err_2
         1          descript_1       124.46   124.46   22.55  54.2
         2          Descript_2       8.20     50.2     0.37   0.1 
         3          Descript_2       52.55    78.3     3.77   2.41
         4          Descript_2       4.33     778.8    0.14   1.78

我所需要的基本上是这样的东西: scatterplot with two errorbars

在这个图中,每个点基本上都有三个属性: 1. x轴误差线 2. y轴误差线 3. 描述这个点代表什么。

我觉得使用 matplotlib 可以很优雅地解决这个问题,虽然我尝试了一些关于误差线的东西,但并没有得到我预期的结果。而且我还没有找到如何在图中放置标题。

2个回答

9
听起来你需要这样的东西?
import matplotlib.pyplot as plt

x = [124.46, 8.20, 52.55, 4.33]
y = [124.46, 50.2, 78.3, 778.8]
xerr = [54.2, 0.1, 2.41, 1.78]
yerr = [22.55, 0.37, 3.77, 0.14]

descrip = ['Atom 1', 'Atom 2', 'Atom 3', 'Atom 4']


plt.errorbar(x, y, xerr, yerr, capsize=0, ls='none', color='black', 
            elinewidth=2)

for xpos, ypos, name in zip(x, y, descrip):
    plt.annotate(name, (xpos, ypos), xytext=(8, 8), va='bottom',
                textcoords='offset points')

plt.show()

enter image description here

errorbar函数的使用方式与plot函数相似。如果您想绘制“散点图”,则需要指定linestyle='none'(或等价的ls='none')。根据您的图纸,您不希望误差线上有箭头,因此我已经指定了capsize=0。同样地,您似乎希望误差线条较粗,因此可以设置elinewidth=2

如果您想在误差条之外添加标记,请将marker='o'指定给errorbar函数(或任何其他标记样式)。

annotate是注释绘图中数据点的最简单方法。在这里,我已经指定注释应该位于每个测量值的右上方8 points处。


现在,errorbar的API是errorbar(x, y, yerr=None, xerr=None, ...) - yerr和xerr被交换了。自从这个答案发布以来,可能已经发生了变化,我没有检查过是否一直如此,但从你的代码和图中可以看出,当时它必须是按照xerr,yerr的顺序。@joe-kington:也许是更新答案的时候了? - chichak

0

不会

import matplotlib.pyplot as plt

x = [100, 200, 300, 400]
y = [100, 200, 300, 400]
xerr = [100, 100, 100, 100]
yerr = [20, 20, 20, 20]

plt.errorbar(x, y, xerr, yerr, ls='none')
plt.show()

这是指误差线在错误的轴上吗?

pyplot.errorbar:

matplotlib.pyplot.errorbar(x, y, yerr=None, xerr=None, fmt=u'', ecolor=None, elinewidth=None, capsize=3, barsabove=False, lolims=False, uplims=False, xlolims=False, xuplims=False, errorevery=1, capthick=None, hold=None, **kwargs)

请注意,yerr在xerr之前。
plt.errorbar(x, y, xerr, yerr, ls='none')

使您的误差线反向 - yerr = xerr,xerr = yerr。 使用命名参数的好时机:

plt.errorbar(x, y, xerr=xerr, yerr=yerr, ls='none')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接