「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Python で列の値によって散布図を色分けする方法は?

Python で列の値によって散布図を色分けする方法は?

2024 年 11 月 9 日に公開
ブラウズ:111

How to Color-Code Scatter Plots by Column Values in Python?

Python での列値による散布図の色分け

データ視覚化では、さまざまなカテゴリに色を割り当てると、明瞭さが向上し、パターンが明らかになります。この機能は R の ggplot2 ですぐに利用できますが、pandas と matplotlib を使用して Python で同じことを実現するにはどうすればよいですか?

更新: Seaborn Enhancements

元の回答以来, Seaborn は、有益で視覚的に魅力的なプロットを作成するための強力なライブラリとして登場しました。最近の更新では、列の値に基づいて散布図に色を付けるための便利な関数が提供されています。

  • seaborn.relplot の使用: この高レベル関数は、matplotlib.pyplot.scatter と Seaborn の機能を組み合わせたものです。ファセットグリッド。指定された色相と順序パラメーターに基づいてカラー コーディングを自動的に処理します。
  • matplotlib.pyplot.scatter から seaborn.FacetGrid へのマッピング: 元のアプローチと同様に、散布関数をFacetGrid を使用し、色相に基づいて色をカスタマイズします。

オリジナルの Pandas と Matplotlib のアプローチ

Matplotlib を使用した直接的なアプローチを探している人のために、色を割り当てるカスタム関数を次に示します。カテゴリカル列に基づいてポイントに変換:

import matplotlib.pyplot as plt
import pandas as pd

def dfScatter(df, xcol='Height', ycol='Weight', catcol='Gender'):
    fig, ax = plt.subplots()
    categories = np.unique(df[catcol])
    colors = np.linspace(0, 1, len(categories))
    colordict = dict(zip(categories, colors))

    df["Color"] = df[catcol].apply(lambda x: colordict[x])
    ax.scatter(df[xcol], df[ycol], c=df["Color"])
    return fig

この関数は、一意のカテゴリ値から色の辞書を作成し、対応する色をデータ ポイントに割り当てます。次に、色分けされた点を使用して散布図が生成されます。

提供されたサンプル データフレームを使用します:

df = pd.DataFrame({'Height': np.append(np.random.normal(6, 0.25, size=5), np.random.normal(5.4, 0.25, size=5)),
                   'Weight': np.append(np.random.normal(180, 20, size=5), np.random.normal(140, 20, size=5)),
                   'Gender': ["Male", "Male", "Male", "Male", "Male",
                              "Female", "Female", "Female", "Female", "Female"]})

データフレームを使用して dfScatter 関数を呼び出す:

fig = dfScatter(df)
fig.savefig('color_coded_scatterplot.png')

点が性別によって色分けされた散布図を作成します:

[性別によって色分けされた散布図のイメージ]

Seaborn の高度な機能とカスタム dfScatter 関数は、Python の散布図に色分けを追加するための柔軟なオプションを提供し、データの視覚化をより有益で視覚的に魅力的なものにします。

リリースステートメント この記事は次の場所に転載されています: 1729320380 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3