LoginSignup
3
6

More than 1 year has passed since last update.

RStudio - tidyverse, ggplot2を用いたデータ可視化の用例集

Last updated at Posted at 2023-02-11

Googleデータアナリティックスプロフェッショナルを通したR言語の学習が完了しました。今回は、学習の途上で作成したtidyverse, ggplot2を用いたデータ可視化について纏めてみることにしました。

R言語でデータ可視化

R言語ではデータの可視化には標準的にggplot2を使いますが、他にも可視化に役立つパッケージが多く配布されています。

  • ggplot2
  • plotly
  • lattice
  • RGL
  • Dygraphs
  • Leaflet
  • Highcharter
  • Patchwork
  • gganimate
  • ggridges

ggplot2の用例集には、公式サイトのGalleryをチェックするのが便利です。
https://exts.ggplot2.tidyverse.org/gallery/

ggplot2の機能一覧

ggplot2を使えば棒グラフ・折れ線グラフ、散布図等々のプロットを描けるほか、プロットの内容をカスタマイズしラベル・軸などを操作することができます。また、パイプ演算子を使うことでデータ操作と可視化を同時に進行することができます。

  • Aesthetics - オブジェクトの視覚的特性
  • Geom - データを表現するのに用いる幾何学的なオブジェクト
  • Facets - データの小グループ・サブセットごとにデータを表示する
  • Labels and annotations - プロットの内容を記述する

今回はデータの分析の例題として著名な、アデリーペンギンの生態を研究したデータを用います。このデータはCRANに登録されているため、install.packages()を通してインストールすることができます。

データ分析の準備

データ分析の準備として、まず分析にかけるデータ・分析に使うパッケージをインポートします。データがインポートできたら、まず以下の作業を行うようにしてます。

  • データを要約(skim_without_charts)
  • データのラベル名を表示(colname)
  • データの要約統計量・度数を算出(summary)
  • データの先頭5行を表示(head)
  • データをペインに表示(view)
library(tidyverse)
library(ggplot2)
library(palmerpenguins)
library(skimr)

library(ggExtra)
library(ggdensity)

#データの要約、データの要約統計量、先頭5行、データをペインに表示
skim_without_charts(penguins)
colname(penguins)
summary(penguins)
head(penguins)
view(penguins)

スクリーンショット 2023-02-11 145714.png

注釈を表示

annotateを使うと注釈を図に表示することができます。注目するべき分布などをプレゼン時に強調したい時に使えます。

#散布図を描く
ggplot(data=penguins) + 
geom_point(mapping=aes(x=flipper_length_mm, y=body_mass_g, color = species))+
annotate("text", x=220, y=3500, label="・The Gentoos are the largest.", fontface="bold", angle=25)

スクリーンショット 2023-02-11 150115.png

散布図・等高線図

散布図を描いたグラフをより視覚的にわかりやすくするには、分布の割合を表した等高線図と合わせるのが効果的です。散布図自体は、定量データと定量データの相関・関係を表したい時に使えます。

#散布図に等高線を描く(別グラフ)
ggplot(penguins, aes(x=flipper_length_mm, y=body_mass_g)) + 
    stat_density2d(aes(alpha=..level.., fill=..level..), size=2, bins=10, geom="polygon") + 
    scale_fill_gradient(low = "yellow", high = "red") +
    scale_alpha(range = c(0.00, 0.8), guide = FALSE) +
    geom_density2d(colour="black", bins=10) +
  geom_point(aes(shape=species, color=species), alpha=0.5, size=1) +
    facet_wrap(~species)

スクリーンショット 2023-02-11 150703.png

#散布図に等高線を描く(同グラフ)
ggplot(penguins, aes(x=flipper_length_mm, y=body_mass_g)) + 
stat_density2d(aes(color=species, fill=species), geom="polygon", bins=10, alpha=0.1) +
geom_point(aes(shape=species, color=species), alpha=0.5, size=1) 

スクリーンショット 2023-02-11 150443.png

#散布図に等高線を描く(同グラフ、分布の度数を表す割合を表示する)
install.packages("ggdensity")
library(ggdensity)

ggplot(penguins, aes(x=flipper_length_mm, y=body_mass_g, fill = species)) +
  geom_hdr() +
  geom_point(shape = 21)

スクリーンショット 2023-02-11 150523.png

プロットサイズを使った可視化

#x=羽の長さ、y=くちばしの長さ、プロットサイズで体重を表す
#プロットの形を変更することで3次以上のデータを表現できる
ggplot(penguins, aes(flipper_length_mm, bill_length_mm, size = body_mass_g, fill = species)) +
    geom_point(shape = 21) 

スクリーンショット 2023-02-11 151839.png

#グリッドごとに性別・種別ごとのデータを表示
ggplot(penguins, aes(flipper_length_mm, bill_length_mm, size = body_mass_g, fill = species)) +
    geom_point(shape = 21) + 
    facet_grid(sex~species)

スクリーンショット 2023-02-11 151914.png

平滑化曲線・近似曲線を使った可視化

#平滑化曲線 - 平滑化・重回帰分析をした結果得られた係数をもとに近似曲線を描く。levelでは信頼水準の範囲を描写できる
#メソッド:lm-単回帰、gam-重回帰、loess-平滑化
ggplot(data=penguins, aes(flipper_length_mm, bill_length_mm)) +
geom_point(color = "red", alpha=0.5) + 
geom_smooth(level=0.9, method="loess")

スクリーンショット 2023-02-11 152141.png

#ペンギンの種類ごとに異なる近似曲線を描く
ggplot(data=penguins, aes(flipper_length_mm, bill_length_mm, linetype=species)) +
geom_point(color = "red", alpha=0.5) + 
geom_smooth(level=0.9, method="gam")

スクリーンショット 2023-02-11 152337.png

棒グラフを使った可視化

#棒グラフで可視化する。定性データの度数・割合を可視化するのに使う

ggplot(data=penguins) + 
geom_bar(aes(x=species, fill=sex), position="dodge")

スクリーンショット 2023-02-11 152619.png

マージナルヒストグラムを使った可視化

マージナルヒストグラムを表示します。カテゴリー・軸ごとにどれ位値が分布しているかを可視化できます。分布の形状や、平均値などの値に有意差があるかを表したい時に使えます。

library(ggExtra)
library(ggdensity)

mh_penguin <- ggplot(penguins, aes(flipper_length_mm, bill_length_mm, colour=species, fill=species)) + 
geom_point() +
geom_hdr_lines(xlim = c(100, 300), ylim = c(0, 100))

ggMarginal(mh_penguin, groupColour = TRUE, groupFill = TRUE)

スクリーンショット 2023-02-11 153045.png

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6