ggplot2-クイックガイド
ggplot2は、特にデータの視覚化と最良の探索的データ分析を提供するために設計されたRパッケージです。凡例の描画や表現などの細部を処理する、美しく手間のかからないプロットを提供します。プロットは繰り返し作成し、後で編集することができます。このパッケージは、Rを使用した探索的データ分析中に収集された生データを表示するレイヤーから始まり、注釈と統計要約のレイヤーを追加することで、レイヤー化された方法で機能するように設計されています。
最も経験豊富なRユーザーでさえ、エレガントなグラフィックを作成するための支援が必要です。このライブラリは、Rでグラフィックを作成するための驚異的なツールですが、ほぼ毎日使用した後でも、チートシートを参照する必要があります。
このパッケージは、「グラフィックの文法」と呼ばれる深い文法の下で機能します。これは、さまざまな方法で作成できる独立したコンポーネントのセットで構成されています。R開発者は他のパッケージで使用される事前に指定されたグラフィックのセットに限定されないため、「グラフィックの文法」がggplot2を非常に強力にする唯一の理由です。文法には、コアルールと原則の単純なセットが含まれています。
2005年、ウィルキンソンは、すべての統計グラフィックスの間に含まれる深い特徴を説明するために、グラフィックスの文法の概念を作成または開始しました。これは、Rに埋め込まれた機能の適応を含むレイヤーのプライマリに焦点を当てています。
「グラフィックの文法」とRの関係
これは、統計グラフィックを使用して、データを色、形状、点、線、棒などの関連する幾何学的オブジェクトのサイズなどの美的属性にマッピングすることをユーザーまたは開発者に通知します。プロットには、前述の座標系で描画された関連データのさまざまな統計変換も含まれる場合があります。また、前述のデータセットの異なるサブセットに対して同じプロットを作成するために一般的に使用される「ファセット」と呼ばれる機能も含まれています。Rには、さまざまな組み込みデータセットが含まれています。これらの独立したコンポーネントの組み合わせは、完全に特定のグラフィックを構成します。
ここで、文法を参照して作成できるさまざまなタイプのプロットに焦点を当てましょう。
データ
ユーザーが、マップされた美的属性を作成するためにデータ内の必要な変数がどのように一緒にマップされるかを説明する、与えられた美的マッピングのセットを視覚化したい場合。
レイヤー
これは、幾何学的要素と必要な統計的変換で構成されています。レイヤーには、幾何学的オブジェクト、ポイント、ライン、ポリゴンなどを使用して実際にプロットを表す短いデータのジオメトリが含まれます。最良のデモンストレーションは、観測値をビニングおよびカウントして、特定の線形モデルの2D関係を要約するための特定のヒストグラムを作成することです。
はかり
スケールは、色、サイズ、形状に関係なく、値の作成に使用されるデータ空間の値をマップするために使用されます。上記のプロットから元のデータ値を読み取ることを可能にする逆マッピングを提供するために必要な凡例または軸を描画するのに役立ちます。
座標系
これは、データ座標がグラフィックの言及された平面にどのように一緒にマッピングされるかを説明します。また、グラフを読み取るために必要な軸とグリッド線の情報も提供します。通常、極座標と地図投影法を含むデカルト座標系として使用されます。
ファセット
データを必要なサブセットに分割し、サブセットをデータの倍数として表示する方法に関する仕様が含まれています。これは、条件付けまたは格子プロセスとも呼ばれます。
テーマ
フォントサイズや背景色のプロパティなど、表示の細かい点を制御します。魅力的なプロットを作成するには、参照を検討することをお勧めします。
さて、文法が提供しない制限や機能について議論することも同様に重要です-
どのグラフィックを使用すべきか、またはユーザーが興味を持っているかについての提案が欠けています。
静的グラフィックの説明のみが含まれているため、対話性については説明していません。動的グラフィックスを作成するには、他の代替ソリューションを適用する必要があります。
ggplot2で作成された簡単なグラフを以下に示します-
Rパッケージには、統計情報の分析や地理空間データの詳細な調査などのさまざまな機能が付属しており、基本的なレポートを簡単に作成できます。
Rのパッケージは、明確に定義された形式のR関数、データ、およびコンパイル済みコードとして定義できます。パッケージが保存されているフォルダまたはディレクトリは、ライブラリと呼ばれます。
上の図に示されているように、libPaths()は、配置されているライブラリを表示する関数であり、関数ライブラリは、ライブラリに保存されているパッケージを表示します。
Rには、パッケージを操作する多数の関数が含まれています。主に使用される3つの主要な機能に焦点を当てます。
- パッケージのインストール
- パッケージの読み込み
- パッケージについて学ぶ
Rにパッケージをインストールするための関数を使用した構文は次のとおりです。
Install.packages(“<package-name>”)
パッケージのインストールの簡単なデモンストレーションを以下に示します。データ視覚化ライブラリであるパッケージ「ggplot2」をインストールする必要があると考えてください。次の構文が使用されます-
Install.packages(“ggplot2”)
特定のパッケージをロードするには、以下の構文に従う必要があります-
Library(<package-name>)
以下に述べるように、同じことがggplot2にも当てはまります-
library(“ggplot2”)
出力は以下のスナップショットに示されています-
必要なパッケージと基本機能の必要性を理解するために、Rはインストールされているパッケージの完全な詳細を提供するヘルプ機能を提供します。
完全な構文は以下に記載されています-
help(ggplot2)
この章では、ggplot2を使用して簡単なプロットを作成することに焦点を当てます。次の手順を使用して、Rでデフォルトのプロットを作成します。
ワークスペースにライブラリとデータセットを含める
ライブラリをRに含めます。必要なパッケージをロードします。次に、ggplot2パッケージに焦点を当てます。
# Load ggplot2
library(ggplot2)
「アイリス」というデータセットを実装します。データセットには、それぞれ50インスタンスの3つのクラスが含まれています。各クラスは、アヤメの植物のタイプを参照しています。1つのクラスは他の2つから線形分離可能です。後者は互いに線形分離可能ではありません。
# Read in dataset
data(iris)
データセットに含まれる属性のリストを以下に示します-
サンプルプロットの属性の使用
より簡単な方法でggplot2を使用して虹彩データセットプロットをプロットするには、次の構文が必要です。
# Plot
IrisPlot <- ggplot(iris, aes(Sepal.Length, Petal.Length, colour=Species))
+ geom_point()
print(IrisPlot)
最初のパラメーターはデータセットを入力として受け取り、2番目のパラメーターはデータベースにプロットする必要のある凡例と属性を示します。この例では、凡例の種を使用しています。Geom_point()は、後の章で詳細に説明する分散プロットを意味します。
生成される出力は以下のとおりです。
ここで、タイトル、xラベル、yラベルを変更できます。これは、以下に示すように、体系的な形式でx軸とy軸のラベルを意味します。
print(IrisPlot + labs(y="Petal length (cm)", x = "Sepal length (cm)")
+ ggtitle("Petal and sepal length of iris"))
グラフの軸について話すとき、それはすべて2次元で表されるx軸とy軸についてです。この章では、データサイエンティストが一般的に使用する2つのデータセット「Plantgrowth」と「Iris」データセットに焦点を当てます。
アイリスデータセットに軸を実装する
Rのggplot2パッケージを使用してx軸とy軸で作業するには、次の手順を使用します。
パッケージの機能を取得するには、ライブラリをロードすることが常に重要です。
# Load ggplot
library(ggplot2)
# Read in dataset
data(iris)
プロットポイントの作成
前の章で説明したように、ポイントを含むプロットを作成します。言い換えれば、それは分散プロットとして定義されます。
# Plot
p <- ggplot(iris, aes(Sepal.Length, Petal.Length, colour=Species)) + geom_point()
p
ここで、「ggplot2」のマッピング構造に言及しているaesの機能を理解しましょう。美的マッピングは、プロットに必要な可変構造と、個々のレイヤー形式で管理する必要のあるデータを記述します。
出力は以下のとおりです。
ハイライトと目盛り
以下に説明するように、x軸とy軸の上記の座標を使用してマーカーをプロットします。次のように、テキストの追加、テキストの繰り返し、特定の領域の強調表示、およびセグメントの追加が含まれます。
# add text
p + annotate("text", x = 6, y = 5, label = "text")
# add repeat
p + annotate("text", x = 4:6, y = 5:7, label = "text")
# highlight an area
p + annotate("rect", xmin = 5, xmax = 7, ymin = 4, ymax = 6, alpha = .5)
# segment
p + annotate("segment", x = 5, xend = 7, y = 4, yend = 5, colour = "black")
テキストを追加するために生成される出力を以下に示します-
上記の座標で特定のテキストを繰り返すと、次の出力が生成されます。テキストは、4から6のx座標と5から7のy座標で生成されます-
特定のエリア出力のセグメンテーションとハイライトを以下に示します。
PlantGrowthデータセット
ここで、「Plantgrowth」と呼ばれる他のデータセットの操作に焦点を当てましょう。必要な手順を以下に示します。
ライブラリを呼び出して、「Plantgrowth」の属性を確認してください。このデータセットには、対照と2つの異なる処理条件下で得られた収量(植物の乾燥重量で測定)を比較する実験の結果が含まれています。
> PlantGrowth
weight group
1 4.17 ctrl
2 5.58 ctrl
3 5.18 ctrl
4 6.11 ctrl
5 4.50 ctrl
6 4.61 ctrl
7 5.17 ctrl
8 4.53 ctrl
9 5.33 ctrl
10 5.14 ctrl
11 4.81 trt1
12 4.17 trt1
13 4.41 trt1
14 3.59 trt1
15 5.87 trt1
16 3.83 trt1
17 6.03 trt1
軸を使用した属性の追加
以下に説明するように、グラフの必要なx軸とy軸を使用して単純なプロットをプロットしてみてください-
> bp <- ggplot(PlantGrowth, aes(x=group, y=weight)) +
+ geom_point()
> bp
生成される出力は次のとおりです。
最後に、以下に説明する基本機能を使用して、要件に従ってx軸とy軸をスワイプできます。
> bp <- ggplot(PlantGrowth, aes(x=group, y=weight)) +
+ geom_point()
> bp
基本的に、審美的なマッピングで多くのプロパティを使用して、ggplot2を使用して軸を操作できます。
軸と凡例をまとめてガイドと呼びます。それらは、プロットから観測値を読み取り、元の値に関してそれらをマッピングすることを可能にします。凡例キーと目盛りラベルは両方ともスケールブレークによって決定されます。凡例と軸は、プロットに必要なそれぞれのスケールとジオメトリに基づいて自動的に生成されます。
ggplot2 −の凡例の動作を理解するために、次の手順が実装されます。
ワークスペースにパッケージとデータセットを含める
ggplot2 −で生成されたグラフの凡例に焦点を当てるために同じプロットを作成しましょう。
> # Load ggplot
> library(ggplot2)
>
> # Read in dataset
> data(iris)
>
> # Plot
> p <- ggplot(iris, aes(Sepal.Length, Petal.Length, colour=Species)) + geom_point()
> p
プロットを観察すると、凡例は以下に説明するように左端の隅に作成されます-
ここで、凡例には、特定のデータセットのさまざまな種類の種が含まれています。
凡例の属性の変更
プロパティ「legend.position」を使用して凡例を削除すると、適切な出力が得られます-
> # Remove Legend
> p + theme(legend.position="none")
以下に示すように、プロパティ「element_blank()」を使用して凡例のタイトルを非表示にすることもできます。
> # Hide the legend title
> p + theme(legend.title=element_blank())
必要に応じて、凡例の位置を使用することもできます。このプロパティは、正確なプロット表現を生成するために使用されます。
> #Change the legend position
> p + theme(legend.position="top")
>
> p + theme(legend.position="bottom")
Top representation
Bottom representation
凡例のフォントスタイルの変更
以下に説明するように、タイトルのフォントスタイルとフォントタイプ、および凡例の他の属性を変更できます。
> #Change the legend title and text font styles
> # legend title
> p + theme(legend.title = element_text(colour = "blue", size = 10, + face = "bold"))
> # legend labels
> p + theme(legend.text = element_text(colour = "red", size = 8, + face = "bold"))
生成される出力は次のとおりです。
次の章では、色、テーマ、データサイエンスの観点からのそれぞれの重要性など、さまざまな背景プロパティを持つさまざまなタイプのプロットに焦点を当てます。
散布図は、通常プロットに使用される折れ線グラフに似ています。散布図は、ある変数が別の変数にどの程度関連しているかを示します。変数間の関係は相関と呼ばれ、通常、統計的手法で使用されます。「アイリス」と呼ばれる同じデータセットを使用します。これには、各変数間の多くの変動が含まれています。これは有名なデータセットで、3種類の虹彩のそれぞれからの花びらの長さと幅が50の花で、がく片の長さと幅の変数をセンチメートル単位で測定します。この種は、Iris setosa、versicolor、virginicaと呼ばれています。
基本的な散布図の作成
「ggplot2」パッケージを使用して散布図を作成するには、次の手順が必要です。
基本的な散布図を作成するには、次のコマンドを実行します-
> # Basic Scatter Plot
> ggplot(iris, aes(Sepal.Length, Petal.Length)) +
+ geom_point()
属性の追加
geom_point()関数のshapeと呼ばれるプロパティを使用して、ポイントの形状を変更できます。
> # Change the shape of points
> ggplot(iris, aes(Sepal.Length, Petal.Length)) +
+ geom_point(shape=1)
必要な散布図に追加されたポイントに色を追加できます。
> ggplot(iris, aes(Sepal.Length, Petal.Length, colour=Species)) +
+ geom_point(shape=1)
この例では、凡例に記載されている種ごとに色を作成しました。上記のプロットでは、3つの種が一意に区別されます。
次に、変数間の関係の確立に焦点を当てます。
> ggplot(iris, aes(Sepal.Length, Petal.Length, colour=Species)) +
+ geom_point(shape=1) +
+ geom_smooth(method=lm)
geom_smooth 関数は、重複のパターンと必要な変数のパターンの作成を支援します。
属性メソッド「lm」は、開発する必要のある回帰直線に言及しています。
> # Add a regression line
> ggplot(iris, aes(Sepal.Length, Petal.Length, colour=Species)) +
+ geom_point(shape=1) +
+ geom_smooth(method=lm)
下記の構文を使用して、影付きの信頼領域のない回帰直線を追加することもできます-
># Add a regression line but no shaded confidence region
> ggplot(iris, aes(Sepal.Length, Petal.Length, colour=Species)) +
+ geom_point(shape=1) +
+ geom_smooth(method=lm, se=FALSE)
影付きの領域は、信頼領域以外のものを表します。
ジッタプロット
ジッタプロットには、散在するプロットを表現できる特殊効果が含まれています。ジッタは、以下に説明するように、ドットを分離するためにドットに割り当てられるランダムな値に他なりません。
> ggplot(mpg, aes(cyl, hwy)) +
+ geom_point() +
+ geom_jitter(aes(colour = class))
棒グラフは、カテゴリデータを長方形で表します。バーは垂直方向と水平方向にプロットできます。高さまたは長さは、グラフに示されている値に比例します。棒グラフのx軸とy軸は、特定のデータセットに含まれるカテゴリを指定します。
ヒストグラムは、言及されたデータセットの分布を明確に示した生データを表す棒グラフです。
この章では、ggplot2を使用した棒グラフとヒストグラムの作成に焦点を当てます。
MPGデータセットを理解する
使用するデータセットを理解しましょう。Mpgデータセットには、EPAが以下のリンクで利用できるようにする燃費データのサブセットが含まれています-
http://fueleconomy.gov
1999年から2008年にかけて毎年新発売されたモデルで構成されています。これは車の人気の代用として使用されました。
データセットに必要な属性のリストを理解するために、次のコマンドが実行されます。
> library(ggplot2)
添付パッケージはggplot2です。
次のオブジェクトは_by_.GlobalEnv −でマスクされています
mpg
警告メッセージ
- パッケージルールはRバージョン3.5.1でビルドされました
- パッケージtuneRはRバージョン3.5.3でビルドされました
- パッケージggplot2はRバージョン3.5.3でビルドされました
バーカウントプロットの作成
バーカウントプロットは、以下のプロットで作成できます-
> # A bar count plot
> p <- ggplot(mpg, aes(x=factor(cyl)))+
+ geom_bar(stat="count")
> p
geom_bar()は、棒グラフを作成するために使用される関数です。カウントと呼ばれる統計値の属性を取ります。
ヒストグラム
ヒストグラムカウントプロットは、以下のプロットで作成できます-
> # A historgram count plot
> ggplot(data=mpg, aes(x=hwy)) +
+ geom_histogram( col="red",
+ fill="green",
+ alpha = .2,
+ binwidth = 5)
geom_histogram()には、ヒストグラムの作成に必要なすべての属性が含まれています。ここでは、それぞれのカウントでhwyの属性を取ります。色は要件に従って取られます。
積み上げ棒グラフ
棒グラフとヒストグラムの一般的なプロットは、次のように作成できます。
> p <- ggplot(mpg, aes(class))
> p + geom_bar()
> p + geom_bar()
このプロットには、それぞれのクラスの棒グラフで定義されたすべてのカテゴリが含まれています。このプロットはスタックグラフと呼ばれます。
円グラフは、数値の比率を示すためにスライスに分割された円形の統計グラフと見なされます。上記の円グラフでは、各スライスの弧の長さは、それが表す量に比例します。弧長は円グラフの角度を表します。円グラフの合計度は360度です。半円または半円グラフは180度で構成されます。
円グラフの作成
以下に示すように、上記のワークスペースにパッケージをロードします-
> # Load modules
> library(ggplot2)
>
> # Source: Frequency table
> df <- as.data.frame(table(mpg$class))
> colnames(df) <- c("class", "freq")
サンプルチャートは、次のコマンドを使用して作成できます-
> pie <- ggplot(df, aes(x = "", y=freq, fill = factor(class))) +
+ geom_bar(width = 1, stat = "identity") +
+ theme(axis.line = element_blank(),
+ plot.title = element_text(hjust=0.5)) +
+ labs(fill="class",
+ x=NULL,
+ y=NULL,
+ title="Pie Chart of class",
+ caption="Source: mpg")
> pie
出力を観察すると、図は以下のように循環的に作成されていません-
座標の作成
次のコマンドを実行して、必要な円グラフを次のように作成します。
> pie + coord_polar(theta = "y", start=0)
この章では、マージナルプロットについて説明します。
限界プロットを理解する
マージナルプロットは、2つの変数間の関係を評価し、それらの分布を調べるために使用されます。マージナルプロットの作成について話すとき、それらは、それぞれのx軸とy軸のマージンにヒストグラム、ボックスプロット、またはドットプロットがある散布図に他なりません。
次の手順は、パッケージ「ggExtra」を使用してRで周辺プロットを作成するために使用されます。このパッケージは、「ggplot2」パッケージの機能を強化するように設計されており、マージナルプロットを成功させるためのさまざまな機能が含まれています。
ステップ1
次のコマンドを使用して「ggExtra」パッケージをインストールすると、正常に実行されます(パッケージがシステムにインストールされていない場合)。
> install.packages("ggExtra")
ステップ2
マージナルプロットを作成するには、必要なライブラリをワークスペースに含めます。
> library(ggplot2)
> library(ggExtra)
ステップ3
前の章で使用した必要なデータセット「mpg」を読み取ります。
> data(mpg)
> head(mpg)
# A tibble: 6 x 11
manufacturer model displ year cyl trans drv cty hwy fl class
<chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compa~
2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compa~
3 audi a4 2 2008 4 manual(m6) f 20 31 p compa~
4 audi a4 2 2008 4 auto(av) f 21 30 p compa~
5 audi a4 2.8 1999 6 auto(l5) f 16 26 p compa~
6 audi a4 2.8 1999 6 manual(m5) f 18 26 p compa~
>
ステップ4
ここで、限界プロットの概念を理解するのに役立つ「ggplot2」を使用して簡単なプロットを作成しましょう。
> #Plot
> g <- ggplot(mpg, aes(cty, hwy)) +
+ geom_count() +
+ geom_smooth(method="lm", se=F)
> g
変数間の関係
次に、2つの属性「hwy」と「cty」の間の関係を生成するのに役立つggMarginal関数を使用して周辺プロットを作成しましょう。
> ggMarginal(g, type = "histogram", fill="transparent")
> ggMarginal(g, type = "boxplot", fill="transparent")
ヒストグラムの周辺プロットの出力は以下のとおりです。
ボックス周辺プロットの出力は以下のとおりです。
バブルプロットは、基本的に円のサイズに使用される3番目の数値変数を持つ散布図であるバブルチャートに他なりません。この章では、バブルプロットのレプリカと見なされるバーカウントプロットとヒストグラムカウントプロットの作成に焦点を当てます。
次の手順を使用して、前述のパッケージでバブルプロットとカウントチャートを作成します-
データセットを理解する
それぞれのパッケージと必要なデータセットをロードして、バブルプロットとカウントチャートを作成します。
> # Load ggplot
> library(ggplot2)
>
> # Read in dataset
> data(mpg)
> head(mpg)
# A tibble: 6 x 11
manufacturer model displ year cyl trans drv cty hwy fl class
<chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compa~
2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compa~
3 audi a4 2 2008 4 manual(m6) f 20 31 p compa~
4 audi a4 2 2008 4 auto(av) f 21 30 p compa~
5 audi a4 2.8 1999 6 auto(l5) f 16 26 p compa~
6 audi a4 2.8 1999 6 manual(m5) f 18 26 p compa~
バーカウントプロットは、次のコマンドを使用して作成できます-
> # A bar count plot
> p <- ggplot(mpg, aes(x=factor(cyl)))+
+ geom_bar(stat="count")
> p
ヒストグラムによる分析
ヒストグラムカウントプロットは、次のコマンドを使用して作成できます-
> # A historgram count plot
> ggplot(data=mpg, aes(x=hwy)) +
+ geom_histogram( col="red",
+ fill="green",
+ alpha = .2,
+ binwidth = 5)
バブルチャート
次に、分散プロットで言及されているポイントの次元を増やすために必要な属性を使用して、最も基本的なバブルプロットを作成しましょう。
ggplot(mpg, aes(x=cty, y=hwy, size = pop)) +geom_point(alpha=0.7)
プロットは、凡例形式に含まれているメーカーの性質を説明しています。表示される値には、「hwy」属性のさまざまな次元が含まれます。
前の章では、「ggplot2」パッケージを使用して作成できるさまざまなタイプのチャートについて説明しました。ここでは、分岐棒グラフ、ロリポップグラフなど、同じもののバリエーションに焦点を当てます。まず、発散棒グラフの作成から始めます。従う手順を以下に示します。
データセットを理解する
必要なパッケージをロードし、mpgデータセット内に「carname」という新しい列を作成します。
#Load ggplot
> library(ggplot2)
> # create new column for car names
> mtcars$`car name` <- rownames(mtcars)
> # compute normalized mpg
> mtcars$mpg_z <- round((mtcars$mpg - mean(mtcars$mpg))/sd(mtcars$mpg), 2)
> # above / below avg flag
> mtcars$mpg_type <- ifelse(mtcars$mpg_z < 0, "below", "above")
> # sort
> mtcars <- mtcars[order(mtcars$mpg_z), ]
上記の計算では、車の名前の新しい列を作成し、ラウンド関数を使用して正規化されたデータセットを計算します。「type」機能の値を取得するために、上下のavgフラグを使用することもできます。後で、値を並べ替えて必要なデータセットを作成します。
受信した出力は次のとおりです-
以下に説明するように、値を因数に変換して、特定のプロットでソートされた順序を保持します-
> # convert to factor to retain sorted order in plot.
> mtcars$`car name` <- factor(mtcars$`car name`, levels = mtcars$`car name`)
得られた出力は以下のとおりです。
発散棒グラフ
次に、必要な座標として使用される、前述の属性を使用して発散棒グラフを作成します。
> # Diverging Barcharts
> ggplot(mtcars, aes(x=`car name`, y=mpg_z, label=mpg_z)) +
+ geom_bar(stat='identity', aes(fill=mpg_type), width=.5) +
+ scale_fill_manual(name="Mileage",
+ labels = c("Above Average", "Below Average"),
+ values = c("above"="#00ba38", "below"="#f8766d")) +
+ labs(subtitle="Normalised mileage from 'mtcars'",
+ title= "Diverging Bars") +
+ coord_flip()
Note −上記の値に対して上方向または下方向を指している一部のディメンションメンバーの発散棒グラフマーク。
発散棒グラフの出力については、以下で説明します。ここでは、関数geom_barを使用して棒グラフを作成します。
発散ロリポップチャート
使用する関数を変更するだけで、同じ属性と座標を使用して発散するロリポップチャートを作成します。つまり、ロリポップチャートの作成に役立つgeom_segment()を作成します。
> ggplot(mtcars, aes(x=`car name`, y=mpg_z, label=mpg_z)) +
+ geom_point(stat='identity', fill="black", size=6) +
+ geom_segment(aes(y = 0,
+ x = `car name`,
+ yend = mpg_z,
+ xend = `car name`),
+ color = "black") +
+ geom_text(color="white", size=2) +
+ labs(title="Diverging Lollipop Chart",
+ subtitle="Normalized mileage from 'mtcars': Lollipop") +
+ ylim(-2.5, 2.5) +
+ coord_flip()
発散ドットプロット
同様の方法で発散ドットプロットを作成します。ドットは、より大きな次元の分散プロットの点を表します。
> ggplot(mtcars, aes(x=`car name`, y=mpg_z, label=mpg_z)) +
+ geom_point(stat='identity', aes(col=mpg_type), size=6) +
+ scale_color_manual(name="Mileage",
+ labels = c("Above Average", "Below Average"),
+ values = c("above"="#00ba38", "below"="#f8766d")) +
+ geom_text(color="white", size=2) +
+ labs(title="Diverging Dot Plot",
+ subtitle="Normalized mileage from 'mtcars': Dotplot") +
+ ylim(-2.5, 2.5) +
+ coord_flip()
ここで、凡例は「平均より上」と「平均より下」の値を緑と赤の異なる色で表しています。ドットプロットは静的な情報を伝えます。原則は、ポイントのみが使用されることを除いて、発散棒グラフの原則と同じです。
この章では、ワークスペースのルックアンドフィールを変更するために使用されるカスタマイズされたテーマの使用に焦点を当てます。「ggthemes」パッケージを使用して、Rのワークスペースでのテーマ管理の概念を理解します。
上記のデータセット内で必要なテーマを使用するために、次の手順を実装しましょう。
GGTHEMES
「ggthemes」パッケージを必要なパッケージとともにRワークスペースにインストールします。
> install.packages("ggthemes")
> Library(ggthemes)
新しいテーマを実装して、製造年と移動年数のあるメーカーの伝説を生み出します。
> library(ggthemes)
> ggplot(mpg, aes(year, displ, color=factor(manufacturer)))+
+ geom_point()+ggtitle("This plot looks a lot different from the default")+
+ theme_economist()+scale_colour_economist()
以前のテーマ管理では、目盛りのテキスト、凡例、およびその他の要素のデフォルトサイズが少し小さいことがわかります。すべてのテキスト要素のサイズを一度に変更するのは非常に簡単です。これは、以下の手順ですべての要素のサイズがbase_sizeに対して相対的(rel())であることを確認できるカスタムテーマを作成するときに実行できます。
> theme_set(theme_gray(base_size = 30))
> ggplot(mpg, aes(x=year, y=class))+geom_point(color="red")
マルチパネルプロットとは、複数のグラフを1つのプロットにまとめてプロットを作成することを意味します。par()関数を使用して、グラフィカルパラメーターmfrowおよびmfcolを渡すことにより、複数のグラフを1つのプロットに配置します。
ここでは、「AirQuality」データセットを使用してマルチパネルプロットを実装します。最初にデータセットを理解して、マルチパネルプロットの作成について見てみましょう。このデータセットには、イタリアの都市のフィールドに配備されたガスマルチセンサーデバイスの応答が含まれています。時間応答の平均は、認定された分析装置からのガス濃度の参照とともに記録されます。
par()関数の洞察
par()関数を理解して、必要なマルチパネルプロットの次元を作成します。
> par(mfrow=c(1,2))
> # set the plotting area into a 1*2 array
これにより、1 * 2の次元の空白のプロットが作成されます。
次に、次のコマンドを使用して、上記のデータセットの棒グラフと円グラフを作成します。これと同じ現象は、グラフィカルパラメータmfcolを使用して実現できます。
マルチパネルプロットの作成
2つの違いは、mfrowがサブプロット領域を行方向に塗りつぶし、mfcolが列方向に塗りつぶすということだけです。
> Temperature <- airquality$Temp
> Ozone <- airquality$Ozone
> par(mfrow=c(2,2))
> hist(Temperature)
> boxplot(Temperature, horizontal=TRUE)
> hist(Ozone)
> boxplot(Ozone, horizontal=TRUE)
箱ひげ図と棒ひげ図は、基本的にマルチパネルプロットを作成する単一ウィンドウで作成されます。
パー関数の次元を変更した同じプロットは、次のようになります。
par(mfcol = c(2, 2))
この章では、3次元プロットの作成にさらに使用できる複数のプロットの作成に焦点を当てます。カバーされるプロットのリストには以下が含まれます-
- 密度プロット
- 箱ひげ図
- ドットプロット
- バイオリン図
前の章で使用した「mpg」データセットを使用します。このデータセットは、38の人気モデルの自動車の1999年と2008年の燃費データを提供します。データセットはggplot2パッケージに同梱されています。さまざまなタイプのプロットを作成するには、以下の手順に従うことが重要です。
> # Load Modules
> library(ggplot2)
>
> # Dataset
> head(mpg)
# A tibble: 6 x 11
manufacturer model displ year cyl trans drv cty hwy fl class
<chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compa~
2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compa~
3 audi a4 2 2008 4 manual(m6) f 20 31 p compa~
4 audi a4 2 2008 4 auto(av) f 21 30 p compa~
5 audi a4 2.8 1999 6 auto(l5) f 16 26 p compa~
6 audi a4 2.8 1999 6 manual(m5) f 18 26 p compa~
密度プロット
密度プロットは、言及されたデータセット内の数値変数の分布をグラフで表したものです。カーネル密度推定を使用して、変数の確率密度関数を示します。
「ggplot2」パッケージには、密度プロットを作成するためのgeom_density()という関数が含まれています。
次のコマンドを実行して、密度プロットを作成します-
> p −- ggplot(mpg, aes(cty)) +
+ geom_density(aes(fill=factor(cyl)), alpha=0.8)
> p
以下に作成したプロットからさまざまな密度を観察できます-
x軸とy軸の名前を変更することでプロットを作成できます。これにより、さまざまな色の組み合わせでタイトルと凡例を含めることで、より明確になります。
> p + labs(title="Density plot",
+ subtitle="City Mileage Grouped by Number of cylinders",
+ caption="Source: mpg",
+ x="City Mileage",
+ fill="# Cylinders")
箱ひげ図
箱ひげ図とも呼ばれる箱ひげ図は、データの5つの数値の要約を表します。5つの数値の要約には、最小、第1四分位、中央値、第3四分位、最大などの値が含まれます。箱ひげ図の中央部分を通る垂直線は「中央値」と見なされます。
次のコマンドを使用して箱ひげ図を作成できます-
> p <- ggplot(mpg, aes(class, cty)) +
+ geom_boxplot(varwidth=T, fill="blue")
> p + labs(title="A Box plot Example",
+ subtitle="Mileage by Class",
+ caption="MPG Dataset",
+ x="Class",
+ y="Mileage")
>p
ここでは、classとctyの属性に関して箱ひげ図を作成しています。
ドットプロット
ドットプロットは、次元の違いだけを除いて、分散プロットに似ています。このセクションでは、既存の箱ひげ図にドットプロットを追加して、画像と明瞭さを向上させます。
箱ひげ図は、次のコマンドを使用して作成できます-
> p <- ggplot(mpg, aes(manufacturer, cty)) +
+ geom_boxplot() +
+ theme(axis.text.x = element_text(angle=65, vjust=0.6))
> p
ドットプロットは、以下のように作成されます-
> p + geom_dotplot(binaxis='y',
+ stackdir='center',
+ dotsize = .5
+ )
バイオリン図
バイオリン図も同様の方法で作成され、ボックスではなくバイオリンの構造が変更されます。出力は以下に明確に記載されています-
> p <- ggplot(mpg, aes(class, cty))
>
> p + geom_violin()
以下に説明するように、1つの関数でプロット全体の外観を変更する方法があります。ただし、パネルの背景色を簡単に変更したい場合は、次を使用してください。
パネルの背景の実装
パネル(panel.background)の変更に役立つ次のコマンドを使用して、背景色を変更できます。
> ggplot(iris, aes(Sepal.Length, Species))+geom_point(color="firebrick")+
+ theme(panel.background = element_rect(fill = 'grey75'))
色の変化は下の写真にはっきりと描かれています-
Panel.grid.majorの実装
以下のコマンドで説明されているように、プロパティ「panel.grid.major」を使用してグリッド線を変更できます。
> ggplot(iris, aes(Sepal.Length, Species))+geom_point(color="firebrick")+
+ theme(panel.background = element_rect(fill = 'grey75'),
+ panel.grid.major = element_line(colour = "orange", size=2),
+ panel.grid.minor = element_line(colour = "blue"))
以下に説明するように、「plot.background」プロパティを使用して、特にパネルを除いて、プロットの背景を変更することもできます。
ggplot(iris, aes(Sepal.Length, Species))+geom_point(color="firebrick")+
+ theme(plot.background = element_rect(fill = 'pink'))
時系列は、特定の時間順序で一連のデータポイントを表すグラフィカルプロットです。時系列は、連続する等間隔の時点でのシーケンスで取得されたシーケンスです。時系列は離散時間データと見なすことができます。この章で使用するデータセットは、米国の経済時系列のすべての詳細を含む「経済」データセットです。
データフレームには、以下に説明する次の属性が含まれています-
日付 | データ収集の月 |
Psavert | 個人貯蓄率 |
Pce | 個人消費支出 |
失業 | 数千人の失業者数 |
Unempmed | 失業期間の中央値 |
ポップ | 総人口(千人) |
必要なパッケージをロードし、デフォルトのテーマを設定して時系列を作成します。
> library(ggplot2)
> theme_set(theme_minimal())
> # Demo dataset
> head(economics)
# A tibble: 6 x 6
date pce pop psavert uempmed unemploy
<date> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1967-07-01 507. 198712 12.6 4.5 2944
2 1967-08-01 510. 198911 12.6 4.7 2945
3 1967-09-01 516. 199113 11.9 4.6 2958
4 1967-10-01 512. 199311 12.9 4.9 3143
5 1967-11-01 517. 199498 12.8 4.7 3066
6 1967-12-01 525. 199657 11.8 4.8 3018
時系列構造を作成する基本的なラインプロットを作成します。
> # Basic line plot
> ggplot(data = economics, aes(x = date, y = pop))+
+ geom_line(color = "#00AFBB", size = 2)
次のコマンドを使用して、データのサブセットをプロットできます。
> # Plot a subset of the data
> ss <- subset(economics, date > as.Date("2006-1-1"))
> ggplot(data = ss, aes(x = date, y = pop)) +
+ geom_line(color = "#FC4E07", size = 2)
時系列の作成
ここでは、変数psavertとuempmedを日付でプロットします。ここでは、tidyrパッケージを使用してデータの形状を変更する必要があります。これは、同じ列(新しい列)のpsavert値とuempmed値を折りたたむことで実現できます。R関数:gather()[tidyr]。次のステップでは、levels = psavertおよびuempmedのグループ化変数を作成します。
> library(tidyr)
> library(dplyr)
Attaching package: ‘dplyr’
The following object is masked from ‘package:ggplot2’: vars
The following objects are masked from ‘package:stats’: filter, lag
The following objects are masked from ‘package:base’: intersect, setdiff, setequal, union
> df <- economics %>%
+ select(date, psavert, uempmed) %>%
+ gather(key = "variable", value = "value", -date)
> head(df, 3)
# A tibble: 3 x 3
date variable value
<date> <chr> <dbl>
1 1967-07-01 psavert 12.6
2 1967-08-01 psavert 12.6
3 1967-09-01 psavert 11.9
次のコマンドを使用して複数のラインプロットを作成し、「psavert」と「unempmed」の関係を確認します。
> ggplot(df, aes(x = date, y = value)) +
+ geom_line(aes(color = variable), size = 1) +
+ scale_color_manual(values = c("#00AFBB", "#E7B800")) +
+ theme_minimal()