web-dev-qa-db-ja.com

海のプロットでsns.setを使用する

私はこれに対する明確な答えを探しましたが、見つけることができませんでした。以前に質問されたことがある場合は、お詫び申し上げます。私はmatplotlib1.4.3でseaborn0.6を使用しています。 ipythonノートブックで多くの図を作成しているので、プロットのスタイルを一時的に変更したいと思います。

具体的には、この例では、フォントサイズと背景スタイルの両方をプロットごとに変更したいと思います。

これは私が探しているプロットを作成しますが、パラメータをグローバルに定義します:

import seaborn as sns
import numpy as np

x = np.random.normal(size=100)

sns.set(style="whitegrid", font_scale=1.5)
sns.kdeplot(x, shade=True);

ただし、これは失敗します。

with sns.set(style="whitegrid", font_scale=1.5):
    sns.kdeplot(x, shade=True);

と:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-10-70c5b03f9aa8> in <module>()
----> 1 with sns.set(style="whitegrid", font_scale=1.5):
      2     sns.kdeplot(x, shade=True);

AttributeError: __exit__

私も試しました:

with sns.axes_style(style="whitegrid", rc={'font.size':10}):
    sns.kdeplot(x, shade=True);

これは失敗しませんが、フォントのサイズも変更されません。どんな助けでも大歓迎です。

14
johnchase

最善の方法は、seabornスタイルとコンテキストパラメーターを1つの辞書に結合し、それをplt.rc_context関数に渡すことです。

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt  
x = np.random.normal(size=100)
with plt.rc_context(dict(sns.axes_style("whitegrid"),
                         **sns.plotting_context("notebook", font_scale=1.5))):
    sns.kdeplot(x, shade=True)
11
mwaskom

これは私が使用しているもので、matplotlibが提供するコンテキスト管理を活用しています。

import matplotlib

class Stylish(matplotlib.rc_context):
    def __init__(self, **kwargs):
        matplotlib.rc_context.__init__(self)
        sns.set(**kwargs)

そして、例えば:

with Stylish(font_scale=2):
    sns.kdeplot(x, shade=True)
3