Rのggplot2パッケージで積み上げ棒グラフを作成する方法を解説します。積み上げ棒グラフは、データの分布や比較を視覚的にわかりやすく表示するグラフの一種です。例えば、商品の売上ランキングや、アンケート結果の集計結果などを、積み上げ棒グラフで表示することで、一目で全体像を把握することができます。
本記事では、Rのggplot2パッケージを使用して、積み上げ棒グラフを作成する方法を解説します。
具体的にはエクセルファイルデータをRで読み込んで、積み上げ棒グラフで作成する場合を例に手順を解説していきます。
また、ggplot2の基本的な機能を解説しながら、積み上げ棒グラフのカスタマイズ方法についても説明します。
エクセルデータの準備
以下のような、日本の産業別実質GDPの推移のエクセルデータを用意しました。
Rで読み込んでいくのは青色のセルのみ読み込んでいきます。詳しくは以前のブログ記事を参考にしてください。
青色のセルを読み込むスクリプトは次のとおりです。
library(readxl)
# Excelファイルのパス(ご自身のファイル名と場所に書き換えてください)
file_path <- "F:/ブログ用/17R/関数辞典/04 read_excel/GDP.xlsx"
# read_excel関数のオプションを設定してデータフレームを読み込む
df <- read_excel(
path = file_path,
sheet = "Sheet3", # シート名
range = "A2:I22", # 読み込む範囲
col_types = c("text", rep("numeric",8)), # 列のデータ型を指定
na = "NA", # 欠損値として扱う文字列
skip = 1, # 最初の1行をスキップ
n_max = 50 # 読み込む最大行数
)
Rでdfを開いてみましょう。
エクセルファイルをRに読み込めているのが確認できました。
積み上げ棒グラフの作成
既にExcelファイルからデータフレーム(df)を読み込んでいるので、ここから各年度ごとに2列目から9列目のデータを積み上げた棒グラフを作成するスクリプトを書きます。以下にスクリプトを示します。
install.packages("tidyr") #インストールされていない人は入れてください
library(tidyr)
library(ggplot2)
# データを長い形式に変換
df_long <- gather(df, key = "Year", value = "Value", -year)
# 積み上げ棒グラフの作成
ggplot(df_long, aes(x = year, y = Value, fill = Year)) +
geom_bar(stat = "identity", position = "stack") +
theme_minimal() +
labs(x = "年", y = "値", fill = "カテゴリー") +
theme(
axis.text.x = element_text(angle = 45, hjust = 1, size = 12, family = "Helvetica", face = "bold"), # X軸のラベルと数値のフォント
axis.title.x = element_text(size = 12, family = "Helvetica", face = "bold"), # X軸タイトルのフォントサイズ
axis.title.y = element_text(size = 12, family = "Helvetica", face = "bold"), # Y軸タイトルのフォントサイズ
axis.text.y = element_text(size = 12, family = "Helvetica", face = "bold") # Y軸数値のフォント
)
生成されるグラフは次のとおりです。
・gather(df, key = "Year", value = "Value", -SampleName)
これによりデータを長い形式に変換しています。言葉で説明するより実際にdf_longをRで見てみます。
分かりましたでしょうか?
gather
関数を使用してデータを長い形式に変換する理由は?
gather
関数を使用してデータを長い形式に変換する理由は、ggplot2
でのグラフ作成に適したデータ形式にするためです。具体的には、以下の理由があります。
-
ggplot2
のデータ要件: ggplot2
は、データを「長い形式」(long format)で扱うことを前提としています。長い形式では、各行が単一の観測値を表し、各列が異なる変数を表します。これにより、複数の変数間の関係をより明確に表現できます。
-
変数の区別: 元のデータフレームでは、各年度のデータが異なる列に格納されています。gather
を使用すると、これらの列が2つの新しい列(この場合はYear
とValue
)に統合されます。これにより、年度ごとのデータが一つの列にまとめられ、もう一つの列にはそれに対応する値が格納されます。
-
グラフ作成の柔軟性: 長い形式に変換することで、ggplot2
を使用してさまざまな種類のグラフを簡単に作成できます。特に積み上げ棒グラフの場合、各棒のセグメント(この場合は年度)をfill
属性に割り当てることが容易になります。
具体的に、gather
関数のこの使用例では以下のことが行われています:
df
:変換するデータフレーム。
key = "Year"
:新しく作成される列で、元のデータフレームの列名(年度)が格納されます。
value = "Value"
:新しく作成されるもう一つの列で、元のデータフレームの値が格納されます。
-year
:この部分は、year列を除いて他のすべての列をYear
とValue
に変換することを意味します。
この変換により、元の「幅広い形式」(wide format)のデータフレームが、ggplot2
でのグラフ作成に適した「長い形式」に変換されます。
スクリプトの解説(# 積み上げ棒グラフの作成)
-
ggplot(df_long, aes(x = SampleName, y = Value, fill = Year))
:
ggplot(df_long, ...)
:ggplot2
を使用してグラフを作成します。ここでdf_long
は、データが長い形式に変換されたデータフレームです。
aes(x = SampleName, y = Value, fill = Year)
:aes
はエステティック(視覚的属性)を設定します。
x = SampleName
:X軸にはSampleName
列のデータを使用します。
y = Value
:Y軸にはValue
列のデータを使用します。
fill = Year
:棒グラフの色分けにYear
列のデータを使用します。これにより、異なる年度のデータが異なる色で表示されます。
-
geom_bar(stat = "identity", position = "stack")
:
geom_bar(...)
:棒グラフを作成します。
stat = "identity"
:データの値をそのまま棒の高さとして使用します。
position = "stack"
:棒を積み上げる形式で表示します。これにより、各サンプル名に対して、異なる年度のデータが積み上げられた棒グラフが作成されます。
-
theme_minimal()
:
- グラフのテーマをミニマル(シンプルなデザイン)に設定します。
-
labs(x = "サンプル名", y = "値", fill = "年度")
:
- 軸ラベルや凡例のタイトルを設定します。
x = "サンプル名"
:X軸のラベルを「サンプル名」とします。
y = "値"
:Y軸のラベルを「値」とします。
fill = "年度"
:凡例のタイトルを「年度」とします。
-
theme(axis.text.x = element~))
:
- この部分で、軸のテキストとタイトルの見た目をカスタマイズしています。
axis.text.x
: X軸のテキスト(数値やカテゴリ)のフォントスタイルを設定します。角度を45度にし、フォントサイズ、フォントファミリー(Helvetica)、フォントスタイル(太字)を指定しています。
axis.title.x
とaxis.title.y
: X軸とY軸のタイトルのフォントスタイルを設定します。
axis.text.y
: Y軸のテキストのフォントスタイルを設定します。
色を指定するには?
積み上げ棒グラフで特定の色を指定するには、scale_fill_manual
関数を使用して、fill
エステティックに対して色をマッピングします。以下は、あなたのスクリプトを修正したものです。ここでは、Year
ごとに異なる色を指定しています。色はご自身の好みに合わせて変更してください。
# 積み上げ棒グラフの作成
ggplot(df_long, aes(x = year, y = Value, fill = Year)) +
geom_bar(stat = "identity", position = "stack") +
scale_fill_manual(values = c("red", "blue", "green", "yellow", "orange", "purple", "pink", "brown", "grey")) + # ここで色を指定
theme_minimal() +
labs(x = "year", y = "値", fill = "カテゴリー") +
theme(
axis.text.x = element_text(angle = 45, hjust = 1, size = 12, family = "Helvetica", face = "bold"), # X軸のラベルと数値のフォント
axis.title.x = element_text(size = 12, family = "Helvetica", face = "bold"), # X軸タイトルのフォントサイズ
axis.title.y = element_text(size = 12, family = "Helvetica", face = "bold"), # Y軸タイトルのフォントサイズ
axis.text.y = element_text(size = 12, family = "Helvetica", face = "bold") # Y軸数値のフォント
)
このスクリプトによって次のようなグラフになります。

統計学基礎
2025/2/26
ベイズ統計学とは?事前確率と事後確率を用いた推論の基礎からRでの実装まで徹底解説!
統計学において、「新しい情報を得たときに、既存の知識をどのように更新するか?」という問題は非常に重要です。その問題に答えるのがベイズ統計学 です。 ベイズ統計学(Bayesian Statistics) は、事前確率(prior probability)と新しいデータの尤度(likelihood)を組み合わせ、事後確率(posterior probability)を求めることで推論を行います。 例えば、以下のようなケースで活用されています。
医療診断:「ある検査で陽性が出た場合、本当に病 ...
ReadMore
統計学
2025/2/26
統計学の歴史③:古代から現代まで、データ分析の進化と発展の軌跡
3. 現代統計学の発展と未来 3-1 コンピュータ革命と統計学 20世紀後半に始まったコンピュータ革命は、統計学の理論と実践に革命的な変化をもたらしました。計算能力の飛躍的向上により、それまで理論上は可能でも実行が困難だった複雑な統計的手法が実用化され、統計学の適用範囲と可能性は大きく拡大しました。 1940年代後半から50年代にかけて開発された初期のコンピュータは、主に軍事目的や科学計算のために使用されていましたが、すぐに統計的計算にも応用されるようになりました。1960年代になると、統計解析専用のソフ ...
ReadMore
統計学
2025/2/26
統計学の歴史②:古代から現代まで、データ分析の進化と発展の軌跡
2. 19世紀~20世紀前半:統計学の黄金期 2-1 統計学の学問的確立 19世紀後半から20世紀初頭にかけて、統計学は独立した学問分野として確立されていきました。この時期、統計学は記述的な段階から分析的・推測的な段階へと発展し、その理論的基盤が大きく強化されました。 この時代の統計学発展の中心となったのが、イギリスの優生学者・統計学者カール・ピアソンです。ゴルトンの研究を引き継いだピアソンは、1901年に「統計的研究のための数学的貢献」を発表し、その中で相関係数(ピアソンの積率相関係数)を定式化しました ...
ReadMore
統計学基礎
2025/2/27
回帰分析
2025/2/26
偏回帰分析とは?基本概念から解釈、Rによる実装まで徹底解説!
統計分析において、「ある説明変数が目的変数に与える影響を評価したい」と考えることはよくあります。しかし、多くのデータには 複数の説明変数が同時に影響を及ぼしている ため、単純な単回帰分析では正しい評価ができないことがあります。 そこで活用されるのが 偏回帰分析(Partial Regression Analysis) です。
偏回帰分析の主な目的 特定の変数が目的変数に与える影響を、他の変数の影響を除外した上で評価する 多変量データの中で、各説明変数の相対的な寄与度を明確にする 重回帰分 ...
ReadMore
統計学基礎
2025/2/26
ベイズ統計学とは?事前確率と事後確率を用いた推論の基礎からRでの実装まで徹底解説!
統計学において、「新しい情報を得たときに、既存の知識をどのように更新するか?」という問題は非常に重要です。その問題に答えるのがベイズ統計学 です。 ベイズ統計学(Bayesian Statistics) は、事前確率(prior probability)と新しいデータの尤度(likelihood)を組み合わせ、事後確率(posterior probability)を求めることで推論を行います。 例えば、以下のようなケースで活用されています。
医療診断:「ある検査で陽性が出た場合、本当に病 ...
ReadMore
統計学
2025/2/26
統計学の歴史③:古代から現代まで、データ分析の進化と発展の軌跡
3. 現代統計学の発展と未来 3-1 コンピュータ革命と統計学 20世紀後半に始まったコンピュータ革命は、統計学の理論と実践に革命的な変化をもたらしました。計算能力の飛躍的向上により、それまで理論上は可能でも実行が困難だった複雑な統計的手法が実用化され、統計学の適用範囲と可能性は大きく拡大しました。 1940年代後半から50年代にかけて開発された初期のコンピュータは、主に軍事目的や科学計算のために使用されていましたが、すぐに統計的計算にも応用されるようになりました。1960年代になると、統計解析専用のソフ ...
ReadMore
統計学
2025/2/26
統計学の歴史②:古代から現代まで、データ分析の進化と発展の軌跡
2. 19世紀~20世紀前半:統計学の黄金期 2-1 統計学の学問的確立 19世紀後半から20世紀初頭にかけて、統計学は独立した学問分野として確立されていきました。この時期、統計学は記述的な段階から分析的・推測的な段階へと発展し、その理論的基盤が大きく強化されました。 この時代の統計学発展の中心となったのが、イギリスの優生学者・統計学者カール・ピアソンです。ゴルトンの研究を引き継いだピアソンは、1901年に「統計的研究のための数学的貢献」を発表し、その中で相関係数(ピアソンの積率相関係数)を定式化しました ...
ReadMore
統計学基礎
2025/2/27
回帰分析
2025/2/26
偏回帰分析とは?基本概念から解釈、Rによる実装まで徹底解説!
統計分析において、「ある説明変数が目的変数に与える影響を評価したい」と考えることはよくあります。しかし、多くのデータには 複数の説明変数が同時に影響を及ぼしている ため、単純な単回帰分析では正しい評価ができないことがあります。 そこで活用されるのが 偏回帰分析(Partial Regression Analysis) です。
偏回帰分析の主な目的 特定の変数が目的変数に与える影響を、他の変数の影響を除外した上で評価する 多変量データの中で、各説明変数の相対的な寄与度を明確にする 重回帰分 ...
ReadMore
統計学基礎
2025/2/26
ベイズ統計学とは?事前確率と事後確率を用いた推論の基礎からRでの実装まで徹底解説!
統計学において、「新しい情報を得たときに、既存の知識をどのように更新するか?」という問題は非常に重要です。その問題に答えるのがベイズ統計学 です。 ベイズ統計学(Bayesian Statistics) は、事前確率(prior probability)と新しいデータの尤度(likelihood)を組み合わせ、事後確率(posterior probability)を求めることで推論を行います。 例えば、以下のようなケースで活用されています。
医療診断:「ある検査で陽性が出た場合、本当に病 ...
ReadMore
統計学
2025/2/26
統計学の歴史③:古代から現代まで、データ分析の進化と発展の軌跡
3. 現代統計学の発展と未来 3-1 コンピュータ革命と統計学 20世紀後半に始まったコンピュータ革命は、統計学の理論と実践に革命的な変化をもたらしました。計算能力の飛躍的向上により、それまで理論上は可能でも実行が困難だった複雑な統計的手法が実用化され、統計学の適用範囲と可能性は大きく拡大しました。 1940年代後半から50年代にかけて開発された初期のコンピュータは、主に軍事目的や科学計算のために使用されていましたが、すぐに統計的計算にも応用されるようになりました。1960年代になると、統計解析専用のソフ ...
ReadMore
統計学
2025/2/26
統計学の歴史②:古代から現代まで、データ分析の進化と発展の軌跡
2. 19世紀~20世紀前半:統計学の黄金期 2-1 統計学の学問的確立 19世紀後半から20世紀初頭にかけて、統計学は独立した学問分野として確立されていきました。この時期、統計学は記述的な段階から分析的・推測的な段階へと発展し、その理論的基盤が大きく強化されました。 この時代の統計学発展の中心となったのが、イギリスの優生学者・統計学者カール・ピアソンです。ゴルトンの研究を引き継いだピアソンは、1901年に「統計的研究のための数学的貢献」を発表し、その中で相関係数(ピアソンの積率相関係数)を定式化しました ...
ReadMore
回帰分析
2025/2/26
偏回帰分析とは?基本概念から解釈、Rによる実装まで徹底解説!
統計分析において、「ある説明変数が目的変数に与える影響を評価したい」と考えることはよくあります。しかし、多くのデータには 複数の説明変数が同時に影響を及ぼしている ため、単純な単回帰分析では正しい評価ができないことがあります。 そこで活用されるのが 偏回帰分析(Partial Regression Analysis) です。
偏回帰分析の主な目的 特定の変数が目的変数に与える影響を、他の変数の影響を除外した上で評価する 多変量データの中で、各説明変数の相対的な寄与度を明確にする 重回帰分 ...
ReadMore
統計学基礎
2025/2/26
ベイズ統計学とは?事前確率と事後確率を用いた推論の基礎からRでの実装まで徹底解説!
統計学において、「新しい情報を得たときに、既存の知識をどのように更新するか?」という問題は非常に重要です。その問題に答えるのがベイズ統計学 です。 ベイズ統計学(Bayesian Statistics) は、事前確率(prior probability)と新しいデータの尤度(likelihood)を組み合わせ、事後確率(posterior probability)を求めることで推論を行います。 例えば、以下のようなケースで活用されています。
医療診断:「ある検査で陽性が出た場合、本当に病 ...
ReadMore
R言語
2025/2/26
ベルヌーイ分布とは?確率論の基本から具体例、Rでのシミュレーションまで解説!
確率論や統計学の基礎において、「ある事象が起こるか、起こらないか」を表現するのに便利な分布がベルヌーイ分布です。 例えば、 コインを投げたときに表(1)が出る確率 メールがスパム(1)かそうでない(0)か 機械が正常に作動するか(1)しないか(0) このように、結果が**「成功」または「失敗」の二択** となる確率モデルを扱う際にベルヌーイ分布が使われます。本記事では、以下のポイントを解説します。
ベルヌーイ分布の基本概念と性質
実際のデータや応用例を用いた説明' ...
ReadMore
数学
2025/2/27
統計学基礎
2025/2/27
回帰分析
2025/2/26
偏回帰分析とは?基本概念から解釈、Rによる実装まで徹底解説!
統計分析において、「ある説明変数が目的変数に与える影響を評価したい」と考えることはよくあります。しかし、多くのデータには 複数の説明変数が同時に影響を及ぼしている ため、単純な単回帰分析では正しい評価ができないことがあります。 そこで活用されるのが 偏回帰分析(Partial Regression Analysis) です。
偏回帰分析の主な目的 特定の変数が目的変数に与える影響を、他の変数の影響を除外した上で評価する 多変量データの中で、各説明変数の相対的な寄与度を明確にする 重回帰分 ...
ReadMore
統計学基礎
2025/2/26
ベイズ統計学とは?事前確率と事後確率を用いた推論の基礎からRでの実装まで徹底解説!
統計学において、「新しい情報を得たときに、既存の知識をどのように更新するか?」という問題は非常に重要です。その問題に答えるのがベイズ統計学 です。 ベイズ統計学(Bayesian Statistics) は、事前確率(prior probability)と新しいデータの尤度(likelihood)を組み合わせ、事後確率(posterior probability)を求めることで推論を行います。 例えば、以下のようなケースで活用されています。
医療診断:「ある検査で陽性が出た場合、本当に病 ...
ReadMore
R言語
2025/2/26
ベルヌーイ分布とは?確率論の基本から具体例、Rでのシミュレーションまで解説!
確率論や統計学の基礎において、「ある事象が起こるか、起こらないか」を表現するのに便利な分布がベルヌーイ分布です。 例えば、 コインを投げたときに表(1)が出る確率 メールがスパム(1)かそうでない(0)か 機械が正常に作動するか(1)しないか(0) このように、結果が**「成功」または「失敗」の二択** となる確率モデルを扱う際にベルヌーイ分布が使われます。本記事では、以下のポイントを解説します。
ベルヌーイ分布の基本概念と性質
実際のデータや応用例を用いた説明' ...
ReadMore
数学
2025/2/27
統計学基礎
2025/2/27
回帰分析
2025/2/26
偏回帰分析とは?基本概念から解釈、Rによる実装まで徹底解説!
統計分析において、「ある説明変数が目的変数に与える影響を評価したい」と考えることはよくあります。しかし、多くのデータには 複数の説明変数が同時に影響を及ぼしている ため、単純な単回帰分析では正しい評価ができないことがあります。 そこで活用されるのが 偏回帰分析(Partial Regression Analysis) です。
偏回帰分析の主な目的 特定の変数が目的変数に与える影響を、他の変数の影響を除外した上で評価する 多変量データの中で、各説明変数の相対的な寄与度を明確にする 重回帰分 ...
ReadMore
統計学基礎
2025/2/26
ベイズ統計学とは?事前確率と事後確率を用いた推論の基礎からRでの実装まで徹底解説!
統計学において、「新しい情報を得たときに、既存の知識をどのように更新するか?」という問題は非常に重要です。その問題に答えるのがベイズ統計学 です。 ベイズ統計学(Bayesian Statistics) は、事前確率(prior probability)と新しいデータの尤度(likelihood)を組み合わせ、事後確率(posterior probability)を求めることで推論を行います。 例えば、以下のようなケースで活用されています。
医療診断:「ある検査で陽性が出た場合、本当に病 ...
ReadMore
R言語
2025/2/26
ベルヌーイ分布とは?確率論の基本から具体例、Rでのシミュレーションまで解説!
確率論や統計学の基礎において、「ある事象が起こるか、起こらないか」を表現するのに便利な分布がベルヌーイ分布です。 例えば、 コインを投げたときに表(1)が出る確率 メールがスパム(1)かそうでない(0)か 機械が正常に作動するか(1)しないか(0) このように、結果が**「成功」または「失敗」の二択** となる確率モデルを扱う際にベルヌーイ分布が使われます。本記事では、以下のポイントを解説します。
ベルヌーイ分布の基本概念と性質
実際のデータや応用例を用いた説明' ...
ReadMore