読み込み中...

Pythonでマスターする!積み上げ棒グラフの作成方法10選

Pythonで作成した色とりどりの積み上げ棒グラフのイメージ Python
この記事は約23分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

今回の記事では、Pythonを使って積み上げ棒グラフを作成する方法を10種類紹介します。

積み上げ棒グラフはデータの比較やトレンドを視覚的に理解するのに有効なツールであり、Pythonのライブラリ、matplotlib、pandas、seabornを活用することで容易に作成できます。

初心者でも一歩ずつわかりやすく解説しますので、Pythonでデータ可視化を学び、データ分析のスキルを磨きましょう!

●Pythonとは

Pythonは、シンプルで読みやすい構文が特徴的なプログラミング言語です。

そのため、プログラミング初心者にも学びやすいとされています。

また、Pythonにはデータ分析や機械学習、ウェブ開発など、多岐にわたる用途で利用できるライブラリが豊富に存在します。

その中でも今回注目するのは、データ可視化に役立つライブラリ、matplotlib、pandas、seabornです。

●積み上げ棒グラフとは

積み上げ棒グラフは、複数のデータを一つの棒グラフに重ねて表示することで、全体の構成比を視覚的に理解するのに役立つグラフです。

○積み上げ棒グラフの特徴

積み上げ棒グラフは、全体の量とその内訳を一目で把握することが可能であり、それぞれのカテゴリーが全体に占める割合を視覚的に理解するのに適しています。

また、時間の経過とともに各カテゴリーの量がどのように変化しているかを表現するのにも用いられます。

○積み上げ棒グラフの用途

積み上げ棒グラフは、製品の売上構成やウェブサイトの訪問者の属性分布、各地域の人口構成など、複数のカテゴリーが一定の全体を構成している場合に活用できます。

また、期間を通じてこれらの構成比がどのように変化するかを示すことで、トレンドを把握するのにも役立てられます。

●Pythonにおけるデータ可視化の重要性

Pythonは、データ分析の現場で広く使われています。

その理由の一つが、データ可視化の容易さにあります。

データ可視化は、大量のデータから傾向やパターンを見つけ出すための有効な手段であり、また、分析結果を他人に伝えるためにも重要な役割を果たします。

Pythonでは、matplotlibやpandas、seabornといったライブラリを使って、手軽に多様なグラフを作成することができます。

●Pythonで積み上げ棒グラフを作るための基本

積み上げ棒グラフを作成するためには、matplotlib、pandas、seabornといったPythonのライブラリを理解することが重要です。

○matplotlibの基本

matplotlibは、Pythonでデータ可視化を行うための基本的なライブラリであり、折れ線グラフ、ヒストグラム、散布図、棒グラフなど様々な種類のグラフを描画することができます。

matplotlibでは、棒グラフを描画するためのbar関数が提供されており、これを利用して積み上げ棒グラフを作成することが可能です。

○pandasの基本

pandasは、Pythonでデータ分析を行うためのライブラリであり、表形式のデータを効率的に扱うことができます。

また、pandasではDataFrameという2次元の表形式のデータ構造を提供しており、これを使ってデータの読み込み、整形、集計を行うことができます。

さらに、pandasはmatplotlibを内部で利用しており、DataFrameから直接グラフを描画することも可能です。

○seabornの基本

seabornは、Pythonのデータ可視化ライブラリであり、matplotlibをベースにした高水準のインターフェイスを提供します。

seabornを使用すると、美しく見やすいグラフを短いコードで作成することができます。

また、seabornでは、カテゴリデータの分布を見やすくするための棒グラフ描画関数barplotが提供されており、これを使って積み上げ棒グラフを作成することも可能です。

●Pythonで積み上げ棒グラフを作る方法10選

Pythonを使ったデータ可視化の一環として、積み上げ棒グラフの作成方法を10種類、具体的なコードとともに解説します。

Pythonのデータ可視化ライブラリーであるmatplotlib、pandas、seabornを活用します。

○サンプルコード1:matplotlibでの基本的な積み上げ棒グラフの作り方

まずはPythonの基本的なライブラリーであるmatplotlibを使った積み上げ棒グラフの作り方を見ていきましょう。

このコードではmatplotlibのpyplotモジュールを使ってシンプルな積み上げ棒グラフを作成しています。

データは二つのリストとして提供し、各バーの高さを足し合わせてグラフを表示します。

import matplotlib.pyplot as plt

# データの作成
bar1 = [10, 20, 30, 40, 50]
bar2 = [15, 25, 35, 45, 55]

# 積み上げ棒グラフの作成
plt.bar(range(len(bar1)), bar1, label='bar1')
plt.bar(range(len(bar2)), bar2, bottom=bar1, label='bar2')

# 凡例の表示
plt.legend()

# グラフの表示
plt.show()

上記のコードを実行すると、次のように5つの棒からなる積み上げ棒グラフが表示されます。

基本的な積み上げ棒グラフ

それぞれの棒は、bar1とbar2の対応する要素の合計高さになります。

○サンプルコード2:pandasでの積み上げ棒グラフの作り方

次に、pandasのDataFrameを使った積み上げ棒グラフの作成方法を見ていきましょう。

pandasのplotメソッドを使うと、DataFrameのデータを直接グラフに描画できます。

この例では2つのカテゴリデータをDataFrameに格納し、それを基に積み上げ棒グラフを作成しています。

import pandas as pd

# データの作成
df = pd.DataFrame({
  'bar1': [10, 20, 30, 40, 50],
  'bar2': [15, 25, 35, 45, 55]
})

# 積み上げ棒グラフの作成
df.plot(kind='bar', stacked=True)

上記のコードを実行すると、matplotlibで作成したグラフと同様の積み上げ棒グラフが表示されますが、この場合はpandasのDataFrameから直接作成しています。

基本的な積み上げ棒グラフ

このようにpandasを使うことで、データの管理と可視化をシームレスに行うことができます。

○サンプルコード3:seabornでの積み上げ棒グラフの作り方

seabornもまたPythonでよく用いられるデータ可視化ライブラリです。

このライブラリはmatplotlibに基づいており、より美しいグラフを簡単に作成できるという特徴があります。

しかし、seabornでは積み上げ棒グラフを直接作成する機能は提供されていません。

そのため、matplotlibの機能を併用して積み上げ棒グラフを作成します。

この例では、seabornのbarplot関数とmatplotlibのpyplotモジュールを組み合わせて積み上げ棒グラフを描画します。

import seaborn as sns
import matplotlib.pyplot as plt

# データの作成
bar1 = [10, 20, 30, 40, 50]
bar2 = [15, 25, 35, 45, 55]

# 積み上げ棒グラフの作成
sns.barplot(x=list(range(len(bar1))), y=bar1, color='blue')
bottom_plot = sns.barplot(x=list(range(len(bar2))), y=bar2, color='red')

# 各棒の上端にバー2の値を加える
top_bar = [i+j for i,j in zip(bar1, bar2)]
for i, val in enumerate(top_bar):
    bottom_plot.text(i, val, val, ha='center')

# グラフの表示
plt.show()

このコードを実行すると、bar1とbar2の値を合計した高さの棒グラフが描画されます。

seabornを使用した積み上げ棒グラフ

各棒の上には、その合計値が表示されています。このようにseabornを使うことで、より視覚的に魅力的なグラフを作成することができます。

○サンプルコード4:複数カテゴリーの積み上げ棒グラフの作り方

Pythonを使ったデータ可視化の技術を進化させるためには、複数のカテゴリを持つデータに対応した積み上げ棒グラフの作成法をマスターすることが不可欠です。

具体的には、pandasとmatplotlibを組み合わせて、複数カテゴリーの積み上げ棒グラフを作成します。

このコードではpandasのDataFrameを作成し、matplotlibで可視化するコードを紹介しています。

この例では、カテゴリー「A」「B」「C」の各々について年度ごとのデータを積み上げて表示しています。

import pandas as pd
import matplotlib.pyplot as plt

# データの準備
data = {
    '年度': ['2019', '2020', '2021'],
    'A': [50, 30, 60],
    'B': [30, 20, 40],
    'C': [20, 50, 30]
}

df = pd.DataFrame(data)

# 基本的な棒グラフの描画
plt.bar(df['年度'], df['A'], label='A')

# 次のカテゴリの棒グラフの描画、下の棒グラフの上に積み上げる
plt.bar(df['年度'], df['B'], bottom=df['A'], label='B')

# 最後のカテゴリの棒グラフの描画、これまでの棒グラフの上に積み上げる
plt.bar(df['年度'], df['C'], bottom=df['A'] + df['B'], label='C')

# 凡例の表示
plt.legend()

# グラフの表示
plt.show()

このコードを実行すると、2019年から2021年までの各年度について、カテゴリーA, B, Cの値が積み上げられた棒グラフが表示されます。

カテゴリーAのデータが一番下に、その上にカテゴリーB、さらにその上にカテゴリーCと積み上げられています。

また、凡例も表示されており、どの色の棒がどのカテゴリーに対応するのかが一目でわかるようになっています。

ここで注意したいのは、bottom引数を使用して積み上げていることです。

初めに基本的な棒グラフとしてカテゴリーAのデータを描画し、次にカテゴリーBのデータをカテゴリーAの上に積み上げるように描画します。

このとき、bottom引数には積み上げる基準となるカテゴリーAのデータを指定します。

カテゴリーCのデータも同様に、すでに積み上げられたカテゴリーAとカテゴリーBのデータの上に描画します。

このように複数のカテゴリーを持つデータを積み上げることで、年度ごとの各カテゴリーの比率や全体の傾向を視覚的に理解することができます。

年度別カテゴリーA, B, Cの積み上げ棒グラフ

ただし、カテゴリーが多いと棒グラフが複雑になり視認性が低下するため、適切なカテゴリーの選択や配色が求められます。

○サンプルコード5:積み上げ棒グラフにラベルを付ける方法

次に進む前に、積み上げ棒グラフにラベルを付ける方法を紹介します。

この手法を使うことで、データの詳細が一目でわかるようになります。

この方法はデータ解析をする際にとても重要な要素であり、データの理解を深め、他の人にも結果を伝えやすくします。

import matplotlib.pyplot as plt
import numpy as np

# データの定義
N = 5
menMeans = (20, 35, 30, 35, 27)
womenMeans = (25, 32, 34, 20, 25)

ind = np.arange(N)    # グループのx座標
width = 0.35       # 棒グラフの幅

# 積み上げ棒グラフの描画
p1 = plt.bar(ind, menMeans, width)
p2 = plt.bar(ind, womenMeans, width, bottom=menMeans)

plt.ylabel('Scores')
plt.title('Scores by group and gender')

# ラベルの追加
plt.xticks(ind, ('G1', 'G2', 'G3', 'G4', 'G5'))
plt.yticks(np.arange(0, 81, 10))
plt.legend((p1[0], p2[0]), ('Men', 'Women'))

plt.show()

このコードでは、matplotlibとnumpyを使って、男性と女性のグループ別スコアを表す積み上げ棒グラフを作成しています。

ここで重要なのが、「plt.xticks」、「plt.yticks」、「plt.legend」の部分です。これらの関数を用いて、グラフにラベルを付けています。

具体的には、「plt.xticks」でx軸にラベルを付け、「plt.yticks」でy軸に目盛りを設定し、「plt.legend」で各データのラベル(凡例)を作成しています。

グループと性別によるスコアの積み上げ棒グラフ

これにより、グラフから直接データを読み取ることが容易になります。

○サンプルコード6:積み上げ棒グラフの色をカスタマイズする方法

グラフは見た目の印象も重要です。

次に、Pythonで積み上げ棒グラフの色をカスタマイズする方法を紹介します。

色を使うことで視覚的に理解しやすくなり、またデータの種類を区別しやすくします。

import matplotlib.pyplot as plt
import numpy as np

N = 5
menMeans = (20, 35, 30, 35, 27)
womenMeans = (25, 32, 34, 20, 25)

ind = np.arange(N)
width = 0.35

# 積み上げ棒グラフの描画と色の指定
p1 = plt.bar(ind, menMeans, width, color='r')
p2 = plt.bar(ind, womenMeans, width, bottom=menMeans, color='b')

plt.ylabel('Scores')
plt.title('Scores by group and gender')
plt.xticks(ind, ('G1', 'G2', 'G3', 'G4', 'G5'))
plt.yticks(np.arange(0, 81, 10))
plt.legend((p1[0], p2[0]), ('Men', 'Women'))

plt.show()

このコードでは、前の例と同じデータを使いつつ、色をカスタマイズしています。

具体的には、’plt.bar’関数の’color’引数を使って、棒グラフの色を設定しています。

色の指定には色名(’red’、’blue’など)または16進数の色コード(’#ff0000’など)を使うことができます。

色指定付きのグループと性別によるスコアの積み上げ棒グラフ

このように色を変更することで、データの視覚的な区別がより明確になります。

これらの色設定をうまく活用して、自分だけのオリジナルなグラフを作成してみてください。

○サンプルコード7:積み上げ棒グラフの横軸と縦軸を入れ替える方法

今回のコードでは、積み上げ棒グラフの横軸と縦軸を入れ替える方法を取り上げます。

このテクニックは視覚的なバリエーションを提供し、ある種のデータをより直感的に表現するのに役立ちます。

まず、pandasライブラリとmatplotlibライブラリを使用して積み上げ棒グラフを作成します。

その後、plt.barh関数を用いて、棒グラフを水平方向に表示させます。横軸と縦軸が入れ替わったグラフが生成されます。

import pandas as pd
import matplotlib.pyplot as plt

data = pd.DataFrame({
    'Product1': [10, 20, 30, 20, 10],
    'Product2': [15, 25, 15, 25, 20]
}, index=['Jan', 'Feb', 'Mar', 'Apr', 'May'])

data.plot(kind='barh', stacked=True, color=['skyblue', 'lightgreen'])
plt.title('Monthly sales of products')
plt.xlabel('Sales')
plt.ylabel('Month')
plt.show()

このコードでは、matplotlibのplot関数のkind引数に’barh’を指定して、積み上げ棒グラフを作成しています。

また、stacked=Trueを指定することで、積み上げ棒グラフを表示することができます。color引数で各バーの色を指定することができます。

この例では、’skyblue’と’lightgreen’の二色を使用しています。

コードを実行すると、Product1とProduct2の月ごとの売上を積み上げた形で水平に表示した棒グラフが生成されます。

水平積み上げ棒グラフ(月次製品販売)

ここでは、縦軸に月、横軸に売上が表示されています。

○サンプルコード8:積み上げ棒グラフの順番を変える方法

次に、積み上げ棒グラフの順番を変更する方法を紹介します。

特定の順序でデータを表示したい場合に役立ちます。

この例では、pandasのreindex関数を使用してデータフレームの行順を指定します。

order = ['Mar', 'Feb', 'May', 'Jan', 'Apr']
data = data.reindex(order)

data.plot(kind='bar', stacked=True, color=['skyblue', 'lightgreen'])
plt.title('Monthly sales of products')
plt.xlabel('Month')
plt.ylabel('Sales')
plt.show()

このコードでは、まず順番を示すリストorderを作成しています。

そして、reindex関数を使って、データフレームの行をこの順番に並べ替えています。

最後に、並べ替えたデータを用いて積み上げ棒グラフを作成しています。

実行結果として、新しい順序に基づいて積み上げ棒グラフが表示されます。

順序を変更した積み上げ棒グラフ

このようにして、視覚的な印象を変えたり、特定の順序でデータを強調したりすることができます。

○サンプルコード9:積み上げ棒グラフに注釈を入れる方法

次に、積み上げ棒グラフに注釈を入れる方法を紹介します。

注釈は、グラフ上の特定のポイントやパターンを強調するために使用します。

Pythonのmatplotlibライブラリには、この目的を果たすためのannotate関数が用意されています。

以下のコードでは、積み上げ棒グラフに注釈を追加する例を表しています。

data = pd.DataFrame({
    'Product1': [10, 20, 30, 20, 10],
    'Product2': [15, 25, 15, 25, 20]
}, index=['Jan', 'Feb', 'Mar', 'Apr', 'May'])

data.plot(kind='bar', stacked=True, color=['skyblue', 'lightgreen'])
plt.title('Monthly sales of products')
plt.xlabel('Month')
plt.ylabel('Sales')

for i, val in enumerate(data.index):
    product1_val = data.loc[val, 'Product1']
    product2_val = data.loc[val, 'Product2']
    plt.annotate(str(product1_val), xy=(i, product1_val/2), ha='center')
    plt.annotate(str(product2_val), xy=(i, product1_val+product2_val/2), ha='center')

plt.show()

このコードでは、積み上げ棒グラフを作成した後、enumerate関数を用いてデータフレームのインデックス(これは月を表しています)を順に取り出しています。

それぞれの月に対して、’Product1’と’Product2’の売上値を取得し、それらの値をannotate関数を使って棒グラフに注釈として表示しています。

annotate関数の最初の引数は表示するテキスト、次のxy引数はテキストを表示する位置を指定します。

ha=’center’を指定すると、テキストが棒の中央に配置されます。

このコードを実行すると、各月の’Product1’と’Product2’の売上値が棒グラフの上部と中央に注釈として表示されます。

これにより、グラフから直接各製品の売上値を読み取ることが可能になります。

○サンプルコード10:積み上げ棒グラフを保存する方法

最後に、作成した積み上げ棒グラフを保存する方法を紹介します。

グラフの保存は、レポート作成やプレゼンテーション、ウェブサイトへの投稿など、さまざまな場面で役立ちます。

matplotlibライブラリのsavefig関数を使用して、グラフを画像ファイルとして保存することができます。

下記のコードでは、前述の積み上げ棒グラフを生成し、その後、’stacked_bar.png’という名前のPNGファイルとして保存します。

data.plot(kind='bar', stacked=True, color=['skyblue', 'lightgreen'])
plt.title('Monthly sales of products')
plt.xlabel('Month')
plt.ylabel('Sales')

for i, val in enumerate(data.index):
    product1_val = data.loc[val, 'Product1']
    product2_val = data.loc[val, 'Product2']
    plt.annotate(str(product1_val), xy=(i, product1_val/2), ha='center')
    plt.annotate(str(product2_val), xy=(i, product1_val+product2_val/2), ha='center')

plt.savefig('stacked_bar.png', dpi=300)
plt.close()

このコードでは、matplotlibのsavefig関数を使用してグラフを保存しています。

引数には保存するファイル名と、dpi(dots per inch)を指定します。

dpiは画像の解像度を表し、値が大きいほど詳細な画像が生成されます。

このコードを実行すると、積み上げ棒グラフが生成され、’stacked_bar.png’という名前の画像ファイルとして保存されます。

この画像ファイルはプログラムを実行したディレクトリに保存されます。

●Pythonで積み上げ棒グラフを作る際の注意点と対処法

Pythonを用いて積み上げ棒グラフを描く際には、いくつかの注意点があります。

ここでは、主に2つのポイントを挙げ、それぞれについての解決策を示します。

①データの順序

積み上げ棒グラフでは、データの順序が非常に重要です。

特に、データフレームにおける列の順序は、棒グラフの上から下への積み上げ順序に直接影響します。

したがって、意図した順序でグラフを描くためには、データフレームの列の順序を適切に調整する必要があります。

下記のコードは、データフレームの列の順序を調整する例を示しています。

data = pd.DataFrame({
    'Product1': [10, 20, 30, 20, 10],
    'Product2': [15, 25, 15, 25, 20]
}, index=['Jan', 'Feb', 'Mar', 'Apr', 'May'])

# データフレームの列の順序を逆にする
data = data.loc[:, ::-1]

data.plot(kind='bar', stacked=True, color=['lightgreen', 'skyblue'])
plt.title('Monthly sales of products')
plt.xlabel('Month')
plt.ylabel('Sales')
plt.show()

このコードでは、locを使用してデータフレームの列の順序を逆にしています。

列順序を反転した積み上げ棒グラフ

これにより、’Product2’が’Product1’よりも下に積み上げられるようになります。

②データの欠損

データフレーム内にNaN(欠損値)が存在すると、積み上げ棒グラフを描く際にエラーが発生する可能性があります。

これを防ぐためには、欠損値を適切に処理する必要があります。

欠損値の処理方法はさまざまですが、ここでは単純に0で埋める方法を示します。

下記のコードは、データフレームの欠損値を0で埋める例を示しています。

data = pd.DataFrame({
    'Product1': [10, 20, np.nan, 20, 10],
    'Product2': [15, 25, 15, np.nan, 20]
}, index=['Jan', 'Feb', 'Mar', 'Apr', 'May'])

# データフレームの欠損値を0で埋める
data = data.fillna(0)

data.plot(kind='bar', stacked=True, color=['skyblue', 'lightgreen'])
plt.title('Monthly sales of products')
plt.xlabel('Month')
plt.ylabel('Sales')
plt.show()

このコードでは、fillna関数を使用してデータフレーム内のすべての欠損値を0で置き換えています。

これにより、積み上げ棒グラフを描く際にエラーを防ぐことができます。

欠損値を0で補完した積み上げ棒グラフ

これらの注意点を念頭に置き、積み上げ棒グラフを描く際には適切なデータの前処理を行うことが重要です。

●積み上げ棒グラフのカスタマイズ方法

積み上げ棒グラフの基本的な作成方法を把握したら、次はそれをカスタマイズして、より見やすく情報を伝える力のあるグラフに仕上げる方法を学んでいきましょう。

ここでは、棒グラフの色のカスタマイズと、凡例の位置の変更について説明します。

下記のコードは、それぞれを適用した例を示しています。

data = pd.DataFrame({
    'Product1': [10, 20, 30, 20, 10],
    'Product2': [15, 25, 15, 25, 20]
}, index=['Jan', 'Feb', 'Mar', 'Apr', 'May'])

#棒グラフの色をカスタマイズし、凡例の位置を変更
ax = data.plot(kind='bar', stacked=True, color=['#FF6347', '#3CB371'])
plt.title('Monthly sales of products')
plt.xlabel('Month')
plt.ylabel('Sales')
ax.legend(loc='upper right')
plt.show()

このコードでは、colorパラメータを使用して各棒の色をカスタマイズしています。

色はRGB形式、またはHTMLカラーコードを使用して指定することができます。

また、legend関数を用いて凡例の位置を変更しています。

locパラメータには、’upper left’、’upper right’、’lower left’、’lower right’などを指定することで、凡例の位置を変更できます。

色と凡例位置をカスタマイズした積み上げ棒グラフ

Pythonで積み上げ棒グラフを作成し、カスタマイズする方法について説明しました。

データの可視化は、データ分析の一部であり、Pythonの強力なライブラリを活用することで、データを理解しやすい形に変換することができます。

まとめ

この記事では、「Pythonでマスターする!積み上げ棒グラフの作成方法10選」をテーマに、Pythonを使って積み上げ棒グラフを描く方法とその注意点、そしてカスタマイズ方法について説明しました。

初心者でも一歩ずつわかりやすく解説しましたので、データ可視化に挑戦してみてください。

積み上げ棒グラフはデータの比較に適した表現方法で、データ分析の幅を広げることができます。

また、Pythonの豊富なライブラリを利用することで、これらのグラフを簡単に描くことができます。

Pythonのmatplotlib、pandas、seabornなどのライブラリを用いて、自分のデータを視覚的に表現し、その洞察を深めていきましょう。