9

我希望将两个数组的位置相互可视化。我的表看起来像这样

    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

我基本上想要的是这样的: 带有两个误差线的散点图

所以在这个图中,每个点基本上都有三个属性:1. xerror bar 2. yerror bar 3. 描述这个点代表什么。

我有一种感觉,这可以用 matplotlib 优雅地完成,虽然我尝试了一些带有错误栏的东西,但这些东西并没有给我我所期望的。而且我还没有找到如何将字幕放在情节中。

4

2 回答 2

8

听起来你想要这样的东西?

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()

在此处输入图像描述

errorbar就像plot. 如果你想要一个“散点图”,那么你需要指定linestyle='none'(或等效地,ls='none')。根据您的绘图,您不希望错误栏上设置上限,因此我指定了capsize=0. 同样,您似乎希望误差线的线条相当粗,因此elinewidth=2.

如果您想要除错误栏之外的标记,只需指定marker='o'(或您想要的任何标记样式)到errorbar.

annotate是在绘图上注释点的最简单方法。在这里,我已指定注释应放置在每个测量值的上方和右侧8点处。

于 2012-05-22T18:34:09.873 回答
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')
于 2014-09-14T23:24:24.223 回答