データに NaN がある場合に、matplotlib の線グラフで陰影付きの不確実領域をプロットする 質問する

データに NaN がある場合に、matplotlib の線グラフで陰影付きの不確実領域をプロットする 質問する

次のようなプロットを希望します:不確実な計画

私はmatplotlibでこれを実行しようとしています:

fig, ax = plt.subplots()

with sns.axes_style("darkgrid"):
    for i in range(5):
        ax.plot(means.ix[i][list(range(3,104))], label=means.ix[i]["label"])
        ax.fill_between(means.ix[i][list(range(3,104))]-stds.ix[i][list(range(3,104))], means.ix[i][list(range(3,104))]+stds.ix[i][list(range(3,104))])
    ax.legend()

網掛け部分を中央の線と同じ色にしたいのですが、今のところ、いくつかのsmeansがあり、それを受け入れられないという問題があります。エラーが発生します。NaNfill_between

TypeError: ufunc 'isfinite' は入力型ではサポートされておらず、キャスト規則 ''safe'' に従って入力をサポートされている型に安全に強制変換できませんでした。

どうすれば望みの成果を達成できるか、何かアイデアはありますか? 複数のシリーズの不確実性を含むポイントのシリーズをプロットできる限り、ソリューションでは matplotlib を使用する必要はありません。

ベストアンサー1

わかりました。問題の 1 つは、dtypeデータの が で でなかったobjectためfloatfill_between数値が有限かどうかを確認しようとしたときに失敗していたことです。最終的に、(a) を に変換しfloat、次に (b) 不確実性と線の色の一致の問題を解決するためにカラー パレットを使用することで、これを解決できました。つまり、次のようになります。

import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
fig, ax = plt.subplots()
clrs = sns.color_palette("husl", 5)
with sns.axes_style("darkgrid"):
    epochs = list(range(101))
    for i in range(5):
        meanst = np.array(means.ix[i].values[3:-1], dtype=np.float64)
        sdt = np.array(stds.ix[i].values[3:-1], dtype=np.float64)
        ax.plot(epochs, meanst, label=means.ix[i]["label"], c=clrs[i])
        ax.fill_between(epochs, meanst-sdt, meanst+sdt ,alpha=0.3, facecolor=clrs[i])
    ax.legend()
    ax.set_yscale('log')

その結果、次のようになりました。ここに画像の説明を入力してください

おすすめ記事