私は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
があり、それを受け入れられないという問題があります。エラーが発生します。NaN
fill_between
TypeError: ufunc 'isfinite' は入力型ではサポートされておらず、キャスト規則 ''safe'' に従って入力をサポートされている型に安全に強制変換できませんでした。
どうすれば望みの成果を達成できるか、何かアイデアはありますか? 複数のシリーズの不確実性を含むポイントのシリーズをプロットできる限り、ソリューションでは matplotlib を使用する必要はありません。
ベストアンサー1
わかりました。問題の 1 つは、dtype
データの が で でなかったobject
ためfloat
、fill_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')