10

エラーバーを使用していくつかのデータ ポイントをプロットしたいと考えています。これらのデータ ポイントの一部には、エラー バーではなく、上限または下限しかありません。

そのため、インデックスを使用して、エラーバーのあるポイントと上限/下限のあるポイントを区別しようとしていました。ただし、次のようなことを試すと:

errorbar(x[i], y[i], yerr = (ymin[i], ymax[i]))

次のエラーが表示されます。

ValueError: In safezip, len(args[0])=1 but len(args[1])=2

これはここでの議論と似ていますが、私は pandas を使用していません。

いずれにせよ、次の方法でエラーを「回避」しようとしました。

errorbar(x[i], y[i], yerr = [[ymin[i], ymax[i]]], uplims = True)

しかし、結果のプロットは明確ではありません:上限とエラーバーが一緒にプロットされているか、上限が2回プロットされているようです...

目標は、上限と下限のエラー バーが対称でない場合に上限/下限をプロットすることです。そのため、上限/下限の矢印の前にあるバーの長さを選択できます。

4

1 に答える 1

12

これは実際、errorbar について私を悩ませがちなことの 1 つです。入力の形状と次元について非常に厄介です。

私が想定しているのは、「エラーバー」が必要であるが、対称的な「エラー」値ではなく、絶対的な上限と下限によって位置を設定したいということです。

errorbar が行うことは、y 配列と下限 (yerr[1]上限) の yerr[0] を (safezip で) 一緒に圧縮することです。したがって、yand yerr[0](and [1]) は、同じサイズ、形状、および次元数の配列である必要があります。yerr 自体は配列である必要はまったくありません。

最初のコードは、x、y、ymin、および ymax がすべて 1 次元配列である場合機能します。これは本来あるべきものです。あなたの y はそうではないようです。

ただし、エラーバー yerr は誤差量であり、絶対限界ではないため、実際の下限と上限に y を加算および減算する必要があることに注意することが重要です。

例えば:

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1,2,3,4])
y = np.array([1,2,3,4])  
ymin = np.array([0,1,2,3])
ymax = np.array([3,4,5,6])
ytop = ymax-y
ybot = y-ymin

# This works
plt.errorbar(x, y, yerr=(ybot, ytop) )

ここに画像の説明を入力

私が何かを誤解している場合はお知らせください。使用しているフォームにサンプル データを投稿していただければ幸いです。

于 2013-03-25T19:32:26.720 に答える