web-dev-qa-db-ja.com

matplotlibで「ゼロ」をプロットしないか、ゼロを「なし」に変更します[Python]

以下のコードがあり、データ内のすべてのゼロをNoneに変換したいと思います(ここでデータをmatplotlibにプロットしたくないため)。ただし、コードは機能せず、0.はまだ印刷中です

sd_rel_track_sum=np.sum(sd_rel_track, axis=1)
for i in sd_rel_track_sum:
   print i
   if i==0:
       i=None

return sd_rel_track_sum

誰もがこれに対する解決策を考えることができますか?または、すべての0をNoneに転送する方法についての答えです。または、Matplotlibにゼロ値をプロットしないでください。

9
values = [3, 5, 0, 3, 5, 1, 4, 0, 9]

def zero_to_nan(values):
    """Replace every 0 with 'nan' and return a copy."""
    return [float('nan') if x==0 else x for x in values]

print(zero_to_nan(values))

あなたにあげる:

[3, 5, nan, 3, 5, 1, 4, nan, 9]

Matplotlibは、nan(数値ではない)値をプロットしません。

16
tamasgal

これにnumpyを使用してみませんか?

>>> values = np.array([3, 5, 0, 3, 5, 1, 4, 0, 9], dtype=np.double)
>>> values[ values==0 ] = np.nan
>>> values
array([  3.,   5.,  nan,   3.,   5.,   1.,   4.,  nan,   9.])

値を整数型の配列にすることはできないことに注意してください。

21
Daniel