Python勉強中の大学生です。
FacetGridを使って複数軸のPlotに挑戦しています。
https://seaborn.pydata.org/generated/seaborn.FacetGrid.html
こちらのサイトを参考にしているのですが、Hueを使ってデータを男女に分けた場合に、サイトに記載の関数Annotateが上手く動かず困っています。
import matplotlib.pyplot as plt tips = sns.load_dataset("tips") def annotate(data, **kws): n = len(data) ax = plt.gca() ax.text(.1, .6, f"N = {n}", transform=ax.transAxes) g = sns.FacetGrid(tips, row='smoker',col="time",hue='sex') g.map_dataframe(sns.scatterplot, x="total_bill", y="tip") g.set_axis_labels("Total bill", "Tip") g.map_dataframe(annotate)
上記を実行した結果、下図のようにHue毎にカウント件数が出力されているようですが、重なって見えなくなってしまいました。
import matplotlib.pyplot as plt tips = sns.load_dataset("tips") def annotate(data, **kws): n = len(data) ax = plt.gca() ax.annotate(f"N = {n}", xy=(0.5, (n/100)+0.5), xycoords=ax.transAxes, xytext=(10, 10), textcoords='offset points', ) g = sns.FacetGrid(tips, row='smoker',col="time",hue='sex') g.map_dataframe(sns.scatterplot, x="total_bill", y="tip") g.set_axis_labels("Total bill", "Tip") g.map_dataframe(annotate)
仕組みがよくわかっていないまま、 調べたら textcoords にoffset pointsを与えてずらせるような記述があったので、上記のように試したのですが、うまくいきませんでした。無理やりではあるのですが、データ確認のために、座標にCount件数の割合をぶつけた結果なんとか別れて出力できたのですが、これだとどっちが男性、女性のデータかわかりませんし、座標も思うように固定したいです。
以上説明が下手で恐縮ですが、
①Hueごとにカウントを表示する方法(N=のところで男性女性かわかるようにする)
② textcoords='offset points'
の正しい使い方(綺麗に並べて表示できるようにする)
にはどうしたらよいでしょうか?
補足
g = sns.FacetGrid(tips, row='smoker',col="time",hue='sex')
ではなく、
g.map_dataframe(sns.scatterplot, x="total_bill", y="tip",hue='sex')
こっちでやる方法も試したのですが、こちらはLegendが正しくされなかったりと公式が推奨していない方法らしいので一旦上の方で解決したいです。。すみません。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。