web-dev-qa-db-ja.com

Seaborn + Pandas with secondary_yでプロットするときにグリッド線を取り除く方法

Pandas seaborn importを使用して2つのデータ系列をプロットしています。理想的には、左右のY軸間で共有される水平グリッド線が欲しいのですが、これは難しいです。

妥協案として、グリッド線をまとめて削除したいと思います。ただし、次のコードは、セカンダリY軸の水平グリッド線を生成します。

import pandas as pd
import numpy as np
import seaborn as sns


data = pd.DataFrame(np.cumsum(np.random.normal(size=(100,2)),axis=0),columns=['A','B'])
data.plot(secondary_y=['B'],grid=False)

gridlines that I want to get rid of

26
Artturi Björk

プロット後にAxesオブジェクトを取り出し、両方の軸で.grid(False)を実行できます。

# Gets the axes object out after plotting
ax = data.plot(...)

# Turns off grid on the left Axis.
ax.grid(False)

# Turns off grid on the secondary (right) Axis.
ax.right_ax(False)
32
Luan Nguyen
sns.set_style("whitegrid", {'axes.grid' : False})

スタイルは、選択したいずれの有効なスタイルでもかまいません。

これに関する素晴らしい記事については、 このサイト を参照してください。

25
Doug W

問題は、デフォルトのpandas書式設定(または選択した書式設定)を使用することです。背後でどのように機能するかはわかりませんが、これらのパラメーターは、プロット関数で渡す書式設定よりも優先されます。それらのリストを見ることができます ここではmpl_style辞書にあります

それを回避するために、これを行うことができます:

import pandas as pd
pd.options.display.mpl_style = 'default'
new_style = {'grid': False}
matplotlib.rc('axes', **new_style)
data = pd.DataFrame(np.cumsum(np.random.normal(size=(100,2)),axis=0),columns=['A','B'])
data.plot(secondary_y=['B'])

enter image description here

9
DataSwede

これは、すべてのキーワード引数が両方のAxesに渡されるわけではなく、パンダのバグのある動作のように感じられます。ただし、seabornでデフォルトでグリッドをオフにする場合は、sns.set_style("dark")を呼び出すだけです。 1つの図のデフォルトのみを変更する場合は、withステートメントでsns.axes_styleを使用することもできます。

5
mwaskom