R Language
ggplot2
サーチ…
備考
ggplot2
は完全なリファレンスWebサイトhttp://ggplot2.tidyverse.org/があります 。
たいていの場合、プロットされたデータの構造や内容(例: data.frame
)は、 data.frame
プロット内で調整するよりもdata.frame
です。
RStudioは、 ここで見つけることができる非常に有用な "ggplot2を使ったデータビジュアライゼーション"のチートシートを公開しています 。
散布図
次のように、組み込み虹彩データセットを使用して簡単な散布図をプロットします。
library(ggplot2)
ggplot(iris, aes(x = Petal.Width, y = Petal.Length, color = Species)) +
geom_point()
複数のプロットを表示する
異なるfacet
機能を使用して1つの画像に複数のプロットを表示する。この方法の利点は、すべての軸がチャート全体で同じスケールを共有するため、一目でそれらを比較することが容易になります。 ggplot2
含まれるmpg
データセットを使用します。
グラフを1行ずつ折り返します(正方形のレイアウトを作成しようとします)。
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_wrap(~class)
1つの行、複数の列に複数のグラフを表示する:
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_grid(.~class)
1つの列、複数の行に複数のグラフを表示する:
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_grid(class~.)
グリッド内の複数のグラフを2つの変数で表示:
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_grid(trans~class) #"row" parameter, then "column" parameter
プロット用にデータを準備する
ggplot2
は、長いデータフレームに最適です。次のサンプルデータは、各カテゴリに列があるため、幅広く記述された形式で20日間の菓子の価格を表します。
set.seed(47)
sweetsWide <- data.frame(date = 1:20,
chocolate = runif(20, min = 2, max = 4),
iceCream = runif(20, min = 0.5, max = 1),
candy = runif(20, min = 1, max = 3))
head(sweetsWide)
## date chocolate iceCream candy
## 1 1 3.953924 0.5890727 1.117311
## 2 2 2.747832 0.7783982 1.740851
## 3 3 3.523004 0.7578975 2.196754
## 4 4 3.644983 0.5667152 2.875028
## 5 5 3.147089 0.8446417 1.733543
## 6 6 3.382825 0.6900125 1.405674
変換するsweetsWide
長いと共に使用するためのフォーマットにggplot2
、基地Rからのいくつかの有用な機能、およびパッケージreshape2
、 data.table
及びtidyr
(時系列で)使用することができます。
# reshape from base R
sweetsLong <- reshape(sweetsWide, idvar = 'date', direction = 'long',
varying = list(2:4), new.row.names = NULL, times = names(sweetsWide)[-1])
# melt from 'reshape2'
library(reshape2)
sweetsLong <- melt(sweetsWide, id.vars = 'date')
# melt from 'data.table'
# which is an optimized & extended version of 'melt' from 'reshape2'
library(data.table)
sweetsLong <- melt(setDT(sweetsWide), id.vars = 'date')
# gather from 'tidyr'
library(tidyr)
sweetsLong <- gather(sweetsWide, sweet, price, chocolate:candy)
すべてが同様の結果を出します:
head(sweetsLong)
## date sweet price
## 1 1 chocolate 3.953924
## 2 2 chocolate 2.747832
## 3 3 chocolate 3.523004
## 4 4 chocolate 3.644983
## 5 5 chocolate 3.147089
## 6 6 chocolate 3.382825
参照してください長いと広いフォーム間のデータリシェイプ 長いとワイドフォーマットの間でデータを変換の詳細については、を。
結果として得られるsweetsLong
は、価格の列とスイートの種類を示す列があります。今プロットははるかに簡単です:
library(ggplot2)
ggplot(sweetsLong, aes(x = date, y = price, colour = sweet)) + geom_line()
水平線と垂直線をプロットする
すべてのカテゴリ変数に共通の水平線を1つ追加する
# sample data
df <- data.frame(x=('A', 'B'), y = c(3, 4))
p1 <- ggplot(df, aes(x=x, y=y))
+ geom_bar(position = "dodge", stat = 'identity')
+ theme_bw()
p1 + geom_hline(aes(yintercept=5), colour="#990000", linetype="dashed")
各カテゴリ変数に水平線を1つ追加する
# sample data
df <- data.frame(x=('A', 'B'), y = c(3, 4))
# add horizontal levels for drawing lines
df$hval <- df$y + 2
p1 <- ggplot(df, aes(x=x, y=y))
+ geom_bar(position = "dodge", stat = 'identity')
+ theme_bw()
p1 + geom_errorbar(aes(y=hval, ymax=hval, ymin=hval), colour="#990000", width=0.75)
グループ化された棒に水平線を追加する
# sample data
df <- data.frame(x = rep(c('A', 'B'), times=2),
group = rep(c('G1', 'G2'), each=2),
y = c(3, 4, 5, 6),
hval = c(5, 6, 7, 8))
p1 <- ggplot(df, aes(x=x, y=y, fill=group))
+ geom_bar(position="dodge", stat="identity")
p1 + geom_errorbar(aes(y=hval, ymax=hval, ymin=hval),
colour="#990000",
position = "dodge",
linetype = "dashed")
縦線を追加
# sample data
df <- data.frame(group=rep(c('A', 'B'), each=20),
x = rnorm(40, 5, 2),
y = rnorm(40, 10, 2))
p1 <- ggplot(df, aes(x=x, y=y, colour=group)) + geom_point()
p1 + geom_vline(aes(xintercept=5), color="#990000", linetype="dashed")
縦と横の棒グラフ
ggplot(data = diamonds, aes(x = cut, fill =color)) +
geom_bar(stat = "count", position = "dodge")
ggplotオブジェクトに単にcoord_flip()を追加するだけで、横棒グラフを取得することができます:
ggplot(data = diamonds, aes(x = cut, fill =color)) +
geom_bar(stat = "count", position = "dodge")+
coord_flip()
バイオリンプロット
ヴァイオリン・プロットは、垂直面にミラーリングされたカーネル密度の推定値です。これらは、いくつかのディストリビューションを並べて視覚化するために使用できます。ミラーリングは、違いを強調するのに役立ちます。
ggplot(diamonds, aes(cut, price)) +
geom_violin()
ヴァイオリンのプロットは、楽器との類似点から名前が付けられています。これは、オーバーレイされたボックスプロットと結合されたときに特に目に見えます。この視覚化は、Tukeyの5つの数字の要約(ボックスプロットとして)と完全な連続密度の見積もり(バイオリン)の両方の根本的な分布を記述する。
ggplot(diamonds, aes(cut, price)) +
geom_violin() +
geom_boxplot(width = .1, fill = "black", outlier.shape = NA) +
stat_summary(fun.y = "median", geom = "point", col = "white")
qplotを使って基本プロットを作成する
qplotは、あまり多くの仕様を必要とせずにデータを常にプロットしようとする、base r plot()
関数に似ています。
基本的なqplot
qplot(x = disp, y = mpg, data = mtcars)
色を追加する
qplot(x = disp, y = mpg, colour = cyl,data = mtcars)
よりスムーズに
qplot(x = disp, y = mpg, geom = c("point", "smooth"), data = mtcars)