R言語で棒グラフ、円グラフ、折れ線グラフをプロットする方法を紹介します。
グラフをプロットするための関数やその実行例について解説します。
この記事で扱うプログラミングコードは以下からダウンロードできます。
テンプレートとして使っていただいて構いません。
R言語 棒グラフ・円グラフ・折れ線グラフ
グラフのプロット
棒グラフ、円グラフ、折れ線グラフの関数を以下にまとめました。
棒フラフ
棒グラフを描くには次の関数barplotを用います。
関数barplotの引数は以下の通りです。
引数 | 説明 |
height | 棒グラフのデータを表すベクトルまたは行列。 |
width | 棒の長さを表すベクトル。 |
space | 棒の間の余白の長さ。 |
names.arg | 棒グラフの下にプロットされる名前を表すベクトル。 |
legend.text | 積み上げ式の棒グラフの凡例を表すベクトル。 |
beside | logical型。FALSEのときは積み上げ式、TRUEのときは並列の棒グラフを描く。 |
horiz | logical型。FALSEのときは垂直に、TRUEのときは水平に棒グラフが描かれる。 |
density | 棒に描くシェードラインの密度のベクトル。 |
angle | シェードラインの角度。 |
col | 棒の色。 |
border | 棒の枠線の色。 |
main,sub | グラフのメインタイトル及びサブタイトル。 |
xlab | x軸のラベル。 |
ylab | y軸のラベル。 |
xlim | x軸の範囲。 |
ylim | y軸の範囲。 |
xpd | logical型。棒が領域外に出ることを許すかどうか。 |
axes | logical型。TRUEのとき縦軸が描画される。 |
cex.axis | 軸のラベルの大きさ。 |
cex.names | 項目名の名前の大きさ。 |
inside | logical型。TRUEのとき隣接する棒を分ける線が描画される。 |
plot | logical型。FALSEのとき何も描画されない。 |
shift | ベクトル。それぞれの棒をx軸に関してどれくらいシフトするか。 |
... | 他の関数に渡すグラフィカルパラメーター。 |
円グラフ
円グラフを描くには次の関数pieを用います。
関数pieの引数は以下の通りです。
引数 | 説明 |
x | 円グラフにプロットする非負のベクトル。 |
labels | character型のベクトル。円グラフのラベル。 |
edges | 円の輪郭をどこまで近似するか。 |
radius | 円の半径 |
clockwise | logical型。時計回りでプロットするかどうか。 |
init.angle | 角度の初期値。どの角度から円グラフを描き始めるか。 |
density | シェードラインの密度 |
angle | シェードラインの角度。 |
col | 各円弧の色。 |
border, lty | 円弧を描くために用いるpolygonに渡す引数。 |
main | プロットのメインタイトル。 |
... | 他の関数に渡すグラフィカルパラメーター。 |
折れ線グラフ
折れ線グラフを描くには次の関数plotを用います。
関数plotの引数は以下の通りです。
引数 | 説明 |
x | x軸の座標。 |
y | y軸の座標。 |
... | 他の関数に渡すグラフィカルパラメーター。 |
実行例
各種グラフのプロットについて見ていきます。
標準で実装されているパッケージbaseだけでなく、次のパッケージggplot2を使ったプロットの方法も紹介します。
1 2 | install.packages("ggplot2") library(ggplot2) |
棒グラフ
次の季節と商品別の売り上げに関するデータセットについて棒グラフをプロットしていきます。
1 2 3 4 5 | dataset <- data.frame(Spring = c(100, 80, 150, 120, 50), Summer = c(140, 100, 200, 100, 60), Autumn = c(80, 90, 160, 80, 40), Winter = c(50, 70, 90, 20, 30), row.names = c("A", "B", "C", "D", "E")) |
datasetは次のように行(商品名)、列(季節)で構成されています。
1 2 3 4 5 6 7 | > dataset Spring Summer Autumn Winter A 100 140 80 50 B 80 100 90 70 C 150 200 160 90 D 120 100 80 20 E 50 60 40 30 |
barplotを使って棒グラフを描画するために、datasetを行列に変換します。
1 | dataset_matrix <- as.matrix(dataset) |
関数barplotの引数にデータを与えると棒グラフを描くことができます。
引数に行列のデータを渡すと積み上げ式の棒グラフを描くこともできます。
また、引数colによって色を変更することができます。
1 2 3 4 5 | #棒グラフ barplot(dataset_matrix[, 1]) barplot(dataset_matrix, legend = rownames(dataset)) barplot(dataset_matrix, legend = rownames(dataset), col = c("lightblue", "mistyrose", "lightcyan", "lavender", "cornsilk")) #色変更 |
パッケージggplot2を使った棒グラフのプロットの方法についても紹介します。
ggplot2の場合、次のように関数geom_barを使うことで棒グラフを描画することができます。
1 2 | ggplot(dataset, aes(x = rownames(dataset), y = Spring)) + geom_bar(stat = "identity") |
積み上げ式の棒グラフを描く場合は、次のように売り上げのデータが1列になるようにデータセットを構築しなおす必要があります。
1 2 3 4 5 6 7 8 9 10 11 | > dataset_plot <- data.frame(sale = unname(unlist(dataset)), + season = rep(colnames(dataset), each = nrow(dataset)), + product = rep(rownames(dataset), ncol(dataset))) > head(dataset_plot) sale season product 1 100 Spring A 2 80 Spring B 3 150 Spring C 4 120 Spring D 5 50 Spring E 6 140 Summer A |
次のように、上で与えたデータフレームを関数ggplotに渡すことで積み上げ式の棒グラフを描くことができます。
1 2 | ggplot(data = dataset_plot, aes(x = season, y = sale, color = product, fill = product)) + geom_bar(stat = "identity") |
ggplot2の色の変更は関数scale_color_manual、scale_fill_manualで行うことができます。
1 2 3 4 | ggplot(data = dataset_plot, aes(x = season, y = sale, color = product, fill = product)) + geom_bar(stat = "identity") + scale_color_manual(values = c("#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7")) + scale_fill_manual(values = c("#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7")) #色変更 |
円グラフ
続いて円グラフのプロットの仕方について見ていきます。
関数pieを用いることで、棒グラフのときと同様に円グラフを描くことができます。
円グラフの色は、引数colによって変更することができます。
1 2 3 4 | #円グラフ pie(dataset_matrix[, 1]) pie(dataset_matrix[, 1], col = c("purple", "violetred1", "green3", "cornsilk", "cyan", "white")) #色変更 |
ggplot2を使って描く場合は、次のように関数geom_barとcoord_polarを用います。
corrd_polarによって極座標変換後のグラフを描くことができます。
1 2 3 4 5 | dataset_plot <- data.frame(sale = dataset$Spring, product = as.factor(rownames(dataset))) ggplot(dataset_plot, aes(x = "", y = sale, fill = product)) + geom_bar(stat = "identity", width = 1) + coord_polar("y", start = 0) |
デフォルトだと左回りの円グラフが描かれます。右回りのグラフを描く場合は次のように引数directionを-1にします。
1 2 3 | ggplot(dataset_plot, aes(x = "", y = sale, fill = product)) + geom_bar(stat = "identity", width = 1) + coord_polar("y", start = 0, direction = -1) #右回り |
ブウグラフのときと同様に、scale_fill_manualによって色を変更することが可能です。
1 2 3 4 | ggplot(dataset_plot, aes(x = "", y = sale, fill = product)) + geom_bar(stat = "identity", width = 1) + coord_polar("y", start = 0, direction = -1) + scale_fill_manual(values = c("#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7")) #色変更 |
円グラフに文字を入れたい場合は、次のように関数geom_textを使います。
1 2 3 4 | ggplot(dataset_plot, aes(x = "", y = sale, fill = product)) + geom_bar(stat = "identity", width = 1) + coord_polar("y", start = 0) + geom_text(aes(y = sum(sale) - cumsum(sale) + sale / 2 , label = product), color = "white", size = 6) #凡例を円グラフに表記 |
1 2 3 4 5 | ggplot(dataset_plot, aes(x = "", y = sale, fill = product)) + geom_bar(stat = "identity", width = 1) + coord_polar("y", start = 0) + geom_text(aes(y = sum(sale) - cumsum(sale) + sale / 2 , label = paste(100 * sale / sum(sale), "%")), color = "white", size = 6) #パーセントを円グラフに表記 |
折れ線グラフ
最後に折れ線グラフのプロットの方法について見ていきます。
次の月ごとの売り上げに関するデータセットについて折れ線グラフを描いていきます。
折れ線グラフをプロットするには、次のように関数plotを使います。
引数xにx軸の座標、引数yにy軸の座標を渡すことで座標に対応する折れ線グラフをプロットすることができます。
また、引数typeを変更することで線の種類を変えることができます。"l"のときは線のみ、"b"と"o"のときに線と点をプロットされます。
1 2 3 | plot(rownames(dataset), dataset$A, type = "l", xlab = "month", ylab = "A") #線のみ plot(rownames(dataset), dataset$A, type = "b", xlab = "month", ylab = "A") #点と線 plot(rownames(dataset), dataset$A, type = "o", xlab = "month", ylab = "A") #点と線 |
複数の折れ線グラフを同時にプロットしたいときは、次のようにpar(new = TRUE)を用いてグラフの重ね描きを行います。
関数plotの引数colで各折れ線の色を変更し、最後にlegendにより凡例を追加することで複数の折れ線グラフを同時に描くことができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | plot(rownames(dataset), dataset$A, type = "o", col = "red", xlim = as.numeric(rownames(dataset)[c(1, nrow(dataset))]), ylim = c(min(dataset), max(dataset)), xlab = "month", ylab = "sale") par(new = TRUE) plot(rownames(dataset), dataset$B, type = "o", col = "dodgerblue", xlim = as.numeric(rownames(dataset)[c(1, nrow(dataset))]), ylim = c(min(dataset), max(dataset)), xaxt = "n", yaxt = "n", ann = FALSE) par(new = TRUE) plot(rownames(dataset), dataset$C, type = "o", col = "limegreen", xlim = as.numeric(rownames(dataset)[c(1, nrow(dataset))]), ylim = c(min(dataset), max(dataset)), xaxt = "n", yaxt = "n", ann = FALSE) legend(x = "topleft", legend = colnames(dataset), col = c("red", "dodgerblue", "limegreen"), lty = 1, pch = 1) |
次に、ggplot2で折れ線グラフを描く流れを紹介します。
折れ線グラフを描くには、次のように関数geom_lineを用います。
1 2 3 4 5 6 | dataset_plot <- data.frame(month = as.numeric(rep(rownames(dataset), ncol(dataset))), sale = unname(unlist(dataset)), product = as.factor(rep(colnames(dataset), each = nrow(dataset)))) ggplot(dataset_plot, aes(x = month, y = sale, color = product)) + geom_line() |
また、geom_pointによって点を追加することもできます。
1 2 3 | ggplot(dataset_plot, aes(x = month, y = sale, color = product)) + geom_line() + geom_point() |
まとめ
R言語で棒グラフ、円グラフ、折れ線グラフをプロットする関数とその実行例を紹介しました。
関数barplot、pie、plotでそれぞれ棒グラフ、円グラフ、折れ線グラフを描くことができます。