SlideShare a Scribd company logo
1 of 47
Download to read offline
第3回 R言語勉強会
横浜国立大学 研究推進機構
URA 久保琢也
2021年1月11日
ggplot2による
グラフの描画
事前準備をお願いします
❖ KAKENより採択課題情報ダウンロード
− 期間:2019年, 2020年, 2021年(別のファイル)
− 種目:基盤研究(S),(A),(B),(C)
− 分野:全審査区分
− 形式:CSVファイル
− 保存方法
• ファイル名:kaken_2019.csv, kaken_ 2020.csv, kaken_2021.csv
• 保 存 先:デスクトップ
❖ パッケージのインストール
install.packages( ggplot2 )
パッケージの呼び出し
❖ パッケージの呼び出し
library( dplyr ) # DFの操作
library( readr ) # データの読み書き
library( ggplot2 ) # グラフの描画
科研費データのインポート
❖ read_csv( )関数
# 科研費データのインポート
d2019 <- read_csv( kaken_2019.csv )
d2020 <- read_csv( kaken_2020.csv )
d2021 <- read_csv( kaken_2021.csv )
データフレーム結合(行方向)
# 年度情報を追加してデータフレームを結合
d0 <- bind_rows(
d2019 %>% mutate( 年度 = 2019 ),
d2020 %>% mutate( 年度 = 2020 ),
d2021 %>% mutate( 年度 = 2021 )
)
bind_rows( df, df, df, … )
from dplyr
ggplot2とは
7
− Tidyverseの中のグラフの描画に特化したパッケージ
− dplyrでデータ処理した後に「%>%」で繋げてかける
ggplot2とは
❖ グラフの各構成要素をレイヤーで表現
− Data :グラフ化したいデータを指定
− Aesthetic:データのマッピング方法を指定
− Geometry:グラフの種類を指定
− Theme :データに関係ない書式、デザインを指定
− Etc.
Data
Aesthetic
Geometry
Theme
散布図
データフレームの準備
# 研究機関ごとの採択件数と採択金額の集計
d1 <- d0 %>%
group_by( 研究機関 ) %>%
summarize( N = n( ), Total = sum( 総配分額 ) )
ggplotオブジェクトの立ち上げ
ggplot( data = d1 )
空白のキャンバスが
表示されるのみ
x軸とy軸の指定
ggplot( data = d1, aes( x = N, y = Total ) )
☆ポイント
データの列情報をグラフの
要素(軸、色、テキスト
等)に使う時にはaes関数
で指定する
データの描画方法の指定(散布図)
ggplot( data = d1, aes( x = N, y = Total ) ) +
geom_point( )
☆ポイント
レイヤー(関数)は「 + 」で
繋げる。「%>%」と間違い
やすいから特に注意
全体テーマの変更
ggplot( data = d1, aes( x = N, y = Total ) ) +
geom_point( ) +
theme_bw( )
☆ポイント
標準は「theme_gray」だが、
他にも「theme_classic」、
「theme_void」など
散布図の点の色を変更
ggplot( data = d1, aes( x = N, y = Total ) ) +
geom_point( color = orange ) +
theme_bw( )
☆ポイント
色の指定は色名以外にも「#」+6
桁のカラーコードで詳細指定も可能
(例:#FF9900)
軸ラベルの変更
ggplot( data = d1, aes( x = N, y = Total ) ) +
geom_point( color = orange ) +
theme_bw( ) +
xlab( 件数 ) + ylab( 金額 )
文字化けの回避方法
ggplot( data = d1, aes( x = N, y = Total ) ) +
geom_point( color = orange ) +
theme_bw( base_family = HiraKakuPro-W3 ) +
xlab( 件数 ) + ylab( 金額 )
☆ポイント
日本語が文字化けする場合(特に
Mac)は、「theme_〇〇」の中で
でフォントを指定する
近似(曲)線の描画
ggplot( data = d1, aes( x = N, y = Total ) ) +
geom_point( color = orange ) +
theme_bw( base_family = HiraKakuPro-W3 ) +
xlab( 件数 ) + ylab( 金額 ) +
geom_smooth( )
グラフの要素例
要素 内容
x x軸の値
y y軸の値
color 折れ線や点の色、枠線の色(棒)
fill 棒グラフの色
size 点の大きさ
shape 点の形
group 折れ線のグループ化
linetype 折れ線のタイプ
… …
☆ポイント(再掲)
データの列情報をグラフの要素(軸、色、テキスト等)に使う時
にはaes関数で指定する
折れ線グラフ
データフレームの準備
# 旧帝大ベクトル
univ <- c("北海道大学", "東北大学", "東京大学", "名古屋大学",
"京都大学", "大阪大学", "九州大学")
# 年度、研究機関別に集計する
d2 <- d0 %>%
filter( 研究機関 %in% univ ) %>%
group_by( 年度, 研究機関 ) %>%
summarize( 件数 = n( ) ) %>%
mutate( 年度 = as.factor( 年度 ) )
ggplotオブジェクトの立ち上げ
ggplot( d2 )
x軸とy軸の指定
ggplot( d2, aes( x = 年度, y = 件数 ) )
テーマの変更とフォントの指定
ggplot( d2, aes( x = 年度, y = 件数 ) ) +
theme_classic( base_family = HiraKakuPro-W3 )
線の描画
ggplot( d2, aes( x = 年度, y = 件数 ) ) +
theme_classic( base_family = HiraKakuPro-W3 ) +
geom_line( )
☆ポイント
この時点ではどのデータを繋げ
て線にするのかうまく伝わって
居ない
研究機関ごとに線を分ける
ggplot( d2, aes( x = 年度, y = 件数, group = 研究機関 ) ) +
theme_classic( base_family = HiraKakuPro-W3 ) +
geom_line( )
研究機関ごとに線の色を変える
ggplot( d2, aes( x = 年度, y = 件数,
group = 研究機関, color = 研究機関 ) ) +
theme_classic( base_family = HiraKakuPro-W3 ) +
geom_line( )
点を追加する
ggplot( d2, aes( x = 年度, y = 件数,
group = 研究機関, color = 研究機関 ) ) +
theme_classic( base_family = HiraKakuPro-W3 ) +
geom_line( ) +
geom_point( )
☆ポイント
色が同じため分かりづらいが、
点は線の上に描画されている
(色を変えたらはっきりする)
棒グラフ
データフレームの準備
# 研究種目、研究機関別に集計する
d3 <- d0 %>%
filter( 研究機関 %in% univ ) %>%
group_by( 研究種目, 研究機関 ) %>%
summarize( 金額 = sum( 総配分額 ) )
軸の指定とフォントの指定
ggplot( d3, aes( x = 研究機関, y = 金額 ) ) +
theme_gray( base_family = HiraKakuPro-W3 )
棒グラフの描画
ggplot( d3, aes( x = 研究機関, y = 金額 ) ) +
theme_gray( base_family = HiraKakuPro-W3 ) +
geom_bar( stat = identity )
研究種目ごとに色分け
ggplot( d3, aes( x = 研究機関, y = 金額, fill = 研究種目 ) ) +
theme_gray( base_family = HiraKakuPro-W3 ) +
geom_bar( stat = identity )
☆ポイント
棒グラフの場合、colorは枠線
の色を指定し、fillは枠線の内側
の色を指定する
棒の積み方を変更(横並び)
ggplot( d3, aes( x = 研究機関, y = 金額, fill = 研究種目 ) ) +
theme_gray( base_family = HiraKakuPro-W3 ) +
geom_bar( stat = identity , position = dodge )
棒の積み方を変更(100%積み上げ)
ggplot( d3, aes( x = 研究機関, y = 金額, fill = 研究種目 ) ) +
theme_gray( base_family = HiraKakuPro-W3 ) +
geom_bar( stat = identity , position = fill )
グラフの向きの変更
ggplot( d3, aes( x = 研究機関, y = 金額, fill = 研究種目 ) ) +
theme_gray( base_family = HiraKakuPro-W3 ) +
geom_bar( stat = identity , position = fill ) +
coord_flip( )
配色のテーマを変更
ggplot( d3, aes( x = 研究機関, y = 金額, fill = 研究種目 ) ) +
theme_gray( base_family = HiraKakuPro-W3 ) +
geom_bar( stat = identity , position = fill ) +
coord_flip( ) +
scale_fill_brewer( palette = Spectral )
☆ポイント
色を1つ1つ指定することもで
きるが、予め用意されたパレッ
トを活用すると楽ができる
パレット一覧
library( RColorBrewer )
display.brewer.all( )
おまけ
データフレームの準備
# 年度、研究種目、研究機関ごとに集計する
d4 <- d0 %>%
filter( 研究機関 %in% univ ) %>%
group_by( 年度, 研究種目, 研究機関 ) %>%
summarize( 金額 = sum( 総配分額 ) ) %>%
mutate( 年度 = as.factor( 年度 ) )
軸の指定とフォントの指定
ggplot( d4, aes( x = 年度, y = 金額 ) ) +
theme_bw( base_family = HiraKakuPro-W3 )
棒グラフの描画
ggplot( d4, aes( x = 年度, y = 金額 ) ) +
theme_bw( base_family = HiraKakuPro-W3 ) +
geom_bar( stat = identity )
研究種目によって色分け
ggplot( d4, aes( x = 年度, y = 金額, fill = 研究種目 ) ) +
theme_bw( base_family = HiraKakuPro-W3 ) +
geom_bar( stat = identity )
研究機関によってパネルを分割
ggplot( d4, aes( x = 年度, y = 金額, fill = 研究種目 ) ) +
theme_bw( base_family = HiraKakuPro-W3 ) +
geom_bar( stat = identity ) +
facet_wrap( vars( 研究機関 ), nrow = 2 )
☆ポイント
facet_wrap関数は指定した列の値に
よってパネルを分ける。この際、列
数や行数の指定も可能。列名をvars
関数に入れる必要がある点に注意。
配色テーマを変えてみる
ggplot( d4, aes( x = 年度, y = 金額, fill = 研究種目 ) ) +
theme_bw( base_family = HiraKakuPro-W3 ) +
geom_bar( stat = identity ) +
facet_wrap( vars( 研究機関 ), nrow = 2 ) +
scale_fill_brewer( palette = Set2 )
終わり
Rの勉強を続けてみたい方へ
❖ C4RA
− SLACK上での意見交換、Q&A
− たまにRの会を開きたいと思っています
(まだ実績に乏しいのですが…)
❖ swirl
− Rを使いながらRを勉強するためのパッケージ
− データの操作や可視化、統計学も同時に勉強できる
− 無料だが、英語のみ
https://swirlstats.com

More Related Content

Similar to テーマ別勉強会(R言語)#3.pdf

Intoroduction of Pandas with Python
Intoroduction of Pandas with PythonIntoroduction of Pandas with Python
Intoroduction of Pandas with PythonAtsushi Hayakawa
 
KETpic できれいな図を書こう
KETpic できれいな図を書こうKETpic できれいな図を書こう
KETpic できれいな図を書こうYoshitomo Akimoto
 
R言語勉強会#5.pdf
R言語勉強会#5.pdfR言語勉強会#5.pdf
R言語勉強会#5.pdfTakuya Kubo
 
R入門とgoogle map +α
R入門とgoogle map +αR入門とgoogle map +α
R入門とgoogle map +αkobexr
 
ggplot2再入門(2015年バージョン)
ggplot2再入門(2015年バージョン)ggplot2再入門(2015年バージョン)
ggplot2再入門(2015年バージョン)yutannihilation
 
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】Tomoharu ASAMI
 
外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」
外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」
外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」SAKAUE, Tatsuya
 
R言語勉強会#3.pdf
R言語勉強会#3.pdfR言語勉強会#3.pdf
R言語勉強会#3.pdfTakuya Kubo
 
第1回R勉強会@東京
第1回R勉強会@東京第1回R勉強会@東京
第1回R勉強会@東京Yohei Sato
 
LET2011: Rによる教育データ分析入門
LET2011: Rによる教育データ分析入門LET2011: Rによる教育データ分析入門
LET2011: Rによる教育データ分析入門Yuichiro Kobayashi
 
20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門Takashi Kitano
 
2016年6月版データマエショリスト入門
2016年6月版データマエショリスト入門2016年6月版データマエショリスト入門
2016年6月版データマエショリスト入門Yuya Matsumura
 
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法SSII
 
textsearch_jaで全文検索
textsearch_jaで全文検索textsearch_jaで全文検索
textsearch_jaで全文検索Akio Ishida
 
機械学習を用いたWeb上の産学連携関連文書の抽出
機械学習を用いたWeb上の産学連携関連文書の抽出機械学習を用いたWeb上の産学連携関連文書の抽出
機械学習を用いたWeb上の産学連携関連文書の抽出National Institute of Informatics
 
[機械学習]文章のクラス分類
[機械学習]文章のクラス分類[機械学習]文章のクラス分類
[機械学習]文章のクラス分類Tetsuya Hasegawa
 
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックスTomoharu ASAMI
 

Similar to テーマ別勉強会(R言語)#3.pdf (20)

Intoroduction of Pandas with Python
Intoroduction of Pandas with PythonIntoroduction of Pandas with Python
Intoroduction of Pandas with Python
 
KETpic できれいな図を書こう
KETpic できれいな図を書こうKETpic できれいな図を書こう
KETpic できれいな図を書こう
 
R言語勉強会#5.pdf
R言語勉強会#5.pdfR言語勉強会#5.pdf
R言語勉強会#5.pdf
 
R入門とgoogle map +α
R入門とgoogle map +αR入門とgoogle map +α
R入門とgoogle map +α
 
ggplot2再入門(2015年バージョン)
ggplot2再入門(2015年バージョン)ggplot2再入門(2015年バージョン)
ggplot2再入門(2015年バージョン)
 
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
 
外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」
外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」
外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」
 
R言語勉強会#3.pdf
R言語勉強会#3.pdfR言語勉強会#3.pdf
R言語勉強会#3.pdf
 
第1回R勉強会@東京
第1回R勉強会@東京第1回R勉強会@東京
第1回R勉強会@東京
 
LET2011: Rによる教育データ分析入門
LET2011: Rによる教育データ分析入門LET2011: Rによる教育データ分析入門
LET2011: Rによる教育データ分析入門
 
Fractional cascading
Fractional cascadingFractional cascading
Fractional cascading
 
20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門
 
Aizu lt tokyo_luxion
Aizu lt tokyo_luxionAizu lt tokyo_luxion
Aizu lt tokyo_luxion
 
HiRoshimaR3_IntroR
HiRoshimaR3_IntroRHiRoshimaR3_IntroR
HiRoshimaR3_IntroR
 
2016年6月版データマエショリスト入門
2016年6月版データマエショリスト入門2016年6月版データマエショリスト入門
2016年6月版データマエショリスト入門
 
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
SSII2021 [OS2-01] 転移学習の基礎:異なるタスクの知識を利用するための機械学習の方法
 
textsearch_jaで全文検索
textsearch_jaで全文検索textsearch_jaで全文検索
textsearch_jaで全文検索
 
機械学習を用いたWeb上の産学連携関連文書の抽出
機械学習を用いたWeb上の産学連携関連文書の抽出機械学習を用いたWeb上の産学連携関連文書の抽出
機械学習を用いたWeb上の産学連携関連文書の抽出
 
[機械学習]文章のクラス分類
[機械学習]文章のクラス分類[機械学習]文章のクラス分類
[機械学習]文章のクラス分類
 
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックス
 

More from Takuya Kubo

R言語勉強会#0.pdf
R言語勉強会#0.pdfR言語勉強会#0.pdf
R言語勉強会#0.pdfTakuya Kubo
 
テーマ別勉強会(R言語)#4.pdf
テーマ別勉強会(R言語)#4.pdfテーマ別勉強会(R言語)#4.pdf
テーマ別勉強会(R言語)#4.pdfTakuya Kubo
 
テーマ別勉強会(R言語)#1.pdf
テーマ別勉強会(R言語)#1.pdfテーマ別勉強会(R言語)#1.pdf
テーマ別勉強会(R言語)#1.pdfTakuya Kubo
 
R言語勉強会#8.pdf
R言語勉強会#8.pdfR言語勉強会#8.pdf
R言語勉強会#8.pdfTakuya Kubo
 
R言語勉強会#7.pdf
R言語勉強会#7.pdfR言語勉強会#7.pdf
R言語勉強会#7.pdfTakuya Kubo
 
R言語勉強会#6.pdf
R言語勉強会#6.pdfR言語勉強会#6.pdf
R言語勉強会#6.pdfTakuya Kubo
 
R言語勉強会#2.pdf
R言語勉強会#2.pdfR言語勉強会#2.pdf
R言語勉強会#2.pdfTakuya Kubo
 
R言語勉強会#1.pdf
R言語勉強会#1.pdfR言語勉強会#1.pdf
R言語勉強会#1.pdfTakuya Kubo
 

More from Takuya Kubo (8)

R言語勉強会#0.pdf
R言語勉強会#0.pdfR言語勉強会#0.pdf
R言語勉強会#0.pdf
 
テーマ別勉強会(R言語)#4.pdf
テーマ別勉強会(R言語)#4.pdfテーマ別勉強会(R言語)#4.pdf
テーマ別勉強会(R言語)#4.pdf
 
テーマ別勉強会(R言語)#1.pdf
テーマ別勉強会(R言語)#1.pdfテーマ別勉強会(R言語)#1.pdf
テーマ別勉強会(R言語)#1.pdf
 
R言語勉強会#8.pdf
R言語勉強会#8.pdfR言語勉強会#8.pdf
R言語勉強会#8.pdf
 
R言語勉強会#7.pdf
R言語勉強会#7.pdfR言語勉強会#7.pdf
R言語勉強会#7.pdf
 
R言語勉強会#6.pdf
R言語勉強会#6.pdfR言語勉強会#6.pdf
R言語勉強会#6.pdf
 
R言語勉強会#2.pdf
R言語勉強会#2.pdfR言語勉強会#2.pdf
R言語勉強会#2.pdf
 
R言語勉強会#1.pdf
R言語勉強会#1.pdfR言語勉強会#1.pdf
R言語勉強会#1.pdf
 

テーマ別勉強会(R言語)#3.pdf