9

data単純な整数インデックスと 5 つの列を持つ DataFrame ( ) があります。列は、、、、、Dateです。Country_ (罪のない人を保護するために名前が変更されました。)行を定義し、列を定義し、色相を定義する を作成したいと思います。これらの詳細のそれぞれについて、時系列グラフを作成したいと思います。つまり、それぞれに 2 つの時系列 (男性 1 人、女性 1 人) を持つグラフの配列を取得する必要があります。私は非常に近づくことができます:AgeGroupGenderStatFacetGridCountryAgeGroupGender

g = sns.FacetGrid(data, row='Country', col='AgeGroup', hue='Gender')
g.map(plt.plot, 'Stat')

ただし、これは日付ではなく x 軸のサンプル番号を示しているだけです。このコンテキストで簡単な修正はありますか。

より一般的には、アプローチFacetGridはグリッドを作成し、次にmapプロット関数を作成することであることを理解しています。独自のプロット関数を作成したい場合、従う必要のある規則は何ですか? 特に、データセットから複数の列に相当するデータを受け入れる独自のプロット関数 ( mapforに渡す) を作成するにはどうすればよいですか?FacetGrid

4

1 に答える 1

10

最初に、より一般的な質問にお答えします。渡すことができる関数の規則は次のFacetGrid.mapとおりです。

  • 最初の引数は x 軸に対応し、2 番目の引数は y 軸に対応します (ただし、2 番目の条件については後ほど詳しく説明します)。
  • また、2 つのキーワード引数color、およびを受け入れる必要がありlabelます。これらよりも変数を使用したい場合はhue、基になるプロット関数に渡す必要がありますが、**kwargs作成している特定のプロットに関連しない場合は、それらをキャッチして何もしないでください。
  • 呼び出されると、「現在アクティブな」matplotlib Axes にプロットを描画する必要があります。

x関数が、y、位置入力を取らずに正しく見えるプロットを描画する場合があります。それが基本的に、あなたが使用している方法でここで起こっていることだと思いますplt.plot. g.set_axis_labels("Date", "Stat")たとえば、を使用した後に呼び出すと、map軸の名前が適切に変更されます。g.set(xticklabels=dates)より意味のあるティックを取得するために実行することもできます。

より一般的な関数 もありますFacetGrid.map_dataframe。ここでのルールは似ていますが、渡す関数は というパラメーターでデータフレーム入力を受け入れる必要があり、data配列のような位置入力を受け取る代わりに、そのデータフレームの変数に対応する文字列を受け取ります。rowファセットを介した各反復で、関数は、 、col、およびhueレベルの組み合わせの値だけにマスクされた入力データフレームで呼び出されます。

plot_by_dateしたがって、特定のケースでは、次のような呼び出し可能な関数を作成する必要があります。

def plot_by_date(x, y, color=None, label=None):

    ...

(私は体にもっと役立ちますが、実際には日付とmatplotlibをどう扱うかわかりません)。最終結果は、この関数を呼び出すと、現在アクティブな軸にプロットする必要があるということです。それからする

g.map(plot_by_date, "Date", "Stat")

そして、それはうまくいくはずだと思います。

于 2014-09-06T16:43:53.827 に答える