14

時折ギャップがある、効果的に「連続した」センサー読み取り値を含むデータセットがあります。

ただし、データが記録されていない期間がいくつかあります。これらのギャップは、サンプル期間よりも大幅に長くなります。

デフォルトでは、pyplot は各データ ポイントを次のデータ ポイントに接続します (ライン スタイルが設定されている場合)。

私は単にそこに行がないことを好みます。つまり、ラインを停止し、ギャップの後で再開したいのです。

y-value を使用してこれらのギャップ セクションに要素を追加しようとしましたNoneが、線をプロットの前の部分に戻すようです (奇妙なことに、これらの線はすべてのズーム レベルで表示されるわけではありません)。

私が考えたもう 1 つのオプションは、単純に を個別に呼び出して各ピースをプロットすることですplotが、これは少し見苦しく面倒です。

これを達成するためのよりエレガントな方法はありますか?

編集:以下は、動作を示す最小限の実例です。最初のプロットは、私が避けようとしている結合線です。2 番目のプロットは、値の追加がNone機能しているように見えることを示していますが、プロットのビューをパンすると、3 番目の図に示されているように、プロットの前の部分にジャンプする線が得られます。

import numpy as np
import matplotlib.pyplot as plt

t1 = np.arange(0, 8, 0.05)
t2 = np.arange(10, 14, 0.05)
t = np.concatenate([t1, t2])
c = np.cos(t)

fig = plt.figure()
ax = fig.gca()
ax.plot(t, c)
ax.set_title('Undesirable joining line')


t1 = np.arange(0, 8, 0.05)
t2 = np.arange(10, 14, 0.05)
c1 = np.cos(t1)
c2 = np.cos(t2)
t = np.concatenate([t1, t1[-1:], t2])
c = np.concatenate([c1, [None,], c2])

fig = plt.figure()
ax = fig.gca()
ax.plot(t, c)
ax.set_title('Ok if you don\'t pan the plot')

fig = plt.figure()
ax = fig.gca()
ax.plot(t, c)
ax.axis([-1, 12, -0.5, 1.25])
ax.set_title('Strange jumping line')

plt.show()

プロット 3、

4

1 に答える 1

15

マスク配列はこれに適しています。接続したくない最初のポイントをマスクするだけです。

import numpy as np
import numpy.ma as ma
import matplotlib.pyplot as plt

t1 = np.arange(0, 8, 0.05)
mask_start = len(t1)
t2 = np.arange(10, 14, 0.05)
t = np.concatenate([t1, t2])
c = np.cos(t)     # an aside, but it's better to use numpy ufuncs than list comps

mc = ma.array(c)
mc[mask_start] = ma.masked
plt.figure()
plt.plot(t, mc)
plt.title('Using masked arrays')

plt.show()

ここに画像の説明を入力

少なくとも私のシステム (OSX、Python 2.7、mpl 1.1.0) では、パンなどの問題はありません。

于 2013-03-27T15:53:00.813 に答える