1. ホーム
  2. パイソン

[解決済み] Seaborn/PythonでCatplotグリッド内のすべてのプロットの上にラインプロットを追加する方法はありますか?

2022-03-04 11:48:03

質問

こんにちは、私はpythonを使うのがとても初めてです。仕事でグラフを作成するために使い始めています(論文やレポートなど)。私はちょうど私が下に詳述した問題について誰かが助けてくれるのだろうか?私は非常に簡単な解決策があると思いますが、私はそれを理解することができませんし、それは私を狂わせます!私は、この問題を解決することができます。

基本的に、私はある実験の結果をプロットしています。Y軸は結果で、この場合は数値(Result)、X軸はカテゴリーで、Locationとラベル付けされています。そして、実験がどのマシンで行われたか(Machine)(これもカテゴリ)に基づいて、データが4つのグラフに分割されています。

この最初の部分は簡単で、使用するコードは次の通りです。

'sns.catplot(x='Location', y='Result', data=df3, hue='Machine', col='Machine', col_wrap = 2, linewidth=2, kind='swarm')'

で、以下のようなグラフが得られます。

ここで、プロットに別のレイヤーを追加したいのですが、それはデータの仕様上限を表す赤い線です。

そこで、上記のコードに次の行を追加します。

'sns.lineplot(x='Location',y=1.8, data=df3, linestyle='--', color='r',linewidth=2)'

すると、次のようなグラフになります。

ご覧のように、私が欲しい赤い線はグラフの1つにしかありません。私がしたいのは、4つのグラフ全てに全く同じ位置に同じ赤い線を追加することだけです。

どなたか助けていただけませんか?

解決方法は?

を使用することができます。 .map を使用して、各サブプロットに水平線を描画します。このとき、生成された FacetGrid オブジェクトを変数に格納します。

以下はその例である。

import matplotlib.pyplot as plt
import seaborn as sns

titanic = sns.load_dataset('titanic').dropna()

g = sns.catplot(x='class', y='age', data=titanic,
                hue='embark_town', col='embark_town', col_wrap=2, linewidth=2, kind='swarm')
g.map(plt.axhline, y=50, ls='--', color='r', linewidth=2)
plt.tight_layout()
plt.show()