Plotting Data with R: Beautiful plots for your Master
今日の授業はデータのグラフィックスに対する。 データタイプがおおいので、全て説明が出来ないと思いますが、メージャーなグラフィックスを説明します。 修士論の為に、エクセルグラフィックスは十分ではないので、出来るだけ、もうちょっとスマートなグラフィックスを使ってみて下さい。このページはこのままですから、また使いたい時に、もう一度ここに来て、コードをコーピぺしたら良いと思います。
This document was compiled for the purpose of easing your life with getting your Msc thesis graphics done. Those are not my own creation but existing libraries and examples. In each cases, I am using the free datasets that come with R and also random normalized variables (function rnorm). You will just need to plug in your own data in those lines of codes. このドキュメントは、あなたのMsc論文のグラフィックを仕上げることで、あなたの生活を楽にすることを目的として作成されました。これらは私が作成したものではなく、既存のライブラリやサンプルを使用しています。それぞれのケースで、私はRに付属する無料のデータセットと、ランダムな正規化変数(関数rnorm)を使用しています。これらのコードに自分のデータを入力する必要があります。
For those of you who are not familiar with R, you can get acquainted to the language, by using one of the available tutorial online. Dr. Yamaji has given me the link to a very good step-by-step tutorial in Japanese, which you can use:
(1) GGPLOT2
R has a lot of different tools that are native to the programming environment, but to get better results, you want to use some of the libraries that can be added to it.The first one we are going to have a look at is ggplot or ggplot2:
https://en.wikipedia.org/wiki/Ggplot2
https://kazutan.github.io/fukuokaR11/intro_ggplot2.html (日本語で)
# install.packages("ggplot2")
# install.packages("hrbrthemes")
library(ggplot2)
library(hrbrthemes)
ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width)) +
geom_point()

# ADD SOME COLOR FROM THE hrbrthemes
ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width, color=Species)) +
geom_point(size=6) +
theme_ipsum()

# ADD SOME TRANSPARENCY
ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width, alpha=Species)) +
geom_point(size=6, color="#69b3a2") +
theme_ipsum()

NA
NA
Very often, you will be confronted to the need of creating graphics showing the correlation between two or more datasets. One of the way to do that is to use a correlation matrix.
# Libraries
# install.packages("gapminder")
library(ggplot2)
library(dplyr)
# The dataset is provided in the gapminder library
library(gapminder)
package 㤼㸱gapminder㤼㸲 was built under R version 4.0.5
data <- gapminder %>% filter(year=="2007") %>% dplyr::select(-year)
# Most basic bubble plot
data %>%
arrange(desc(pop)) %>%
mutate(country = factor(country, country)) %>%
ggplot(aes(x=gdpPercap, y=lifeExp, size = pop)) +
geom_point(alpha=0.5) +
scale_size(range = c(.1, 24), name="Population (M)")

# Libraries
library(ggplot2)
library(dplyr)
# The dataset is provided in the gapminder library
library(gapminder)
data <- gapminder %>% filter(year=="2007") %>% dplyr::select(-year)
# Most basic bubble plot
data %>%
arrange(desc(pop)) %>%
mutate(country = factor(country, country)) %>%
ggplot(aes(x=gdpPercap, y=lifeExp, size=pop, color=continent)) +
geom_point(alpha=0.5) +
scale_size(range = c(.1, 24), name="Population (M)")

TIME SERIES DATA:
# Libraries
library(ggplot2)
library(dplyr)
package 㤼㸱dplyr㤼㸲 was built under R version 4.0.3
Attaching package: 㤼㸱dplyr㤼㸲
The following objects are masked from 㤼㸱package:stats㤼㸲:
filter, lag
The following objects are masked from 㤼㸱package:base㤼㸲:
intersect, setdiff, setequal, union
# Dummy data
data <- data.frame(
day = as.Date("2017-06-14") - 0:364,
value = runif(365) + seq(-140, 224)^2 / 10000
)
# Most basic bubble plot
p <- ggplot(data, aes(x=day, y=value)) +
geom_line() +
xlab("")
p

CORRELATION MATRICES:
In this section, we are using the GGally package in R.
# intall.packages("GGally")
library(GGally)
data <- data.frame( var1 = 1:100 + rnorm(100,sd=20), v2 = 1:100 + rnorm(100,sd=27), v3 = rep(1, 100) + rnorm(100, sd = 1))
data$v4 = data$var1 ** 2
data$v5 = -(data$var1 ** 2)
ggpairs(data, title="correlogram with ggpairs()")

data(tips, package = "reshape")
ggpairs(
tips[, c(1, 3, 4, 2)],
upper = list(continuous = "density", combo = "box_no_facet"),
lower = list(continuous = "points", combo = "dot_no_facet")
)

ggcorr(data, method = c("everything", "pearson"))

data(flea)
ggpairs(flea, columns = 2:4, ggplot2::aes(colour=species))

Correlogram
library(corrgram)
corrgram(mtcars, order=NULL, lower.panel=panel.shade, upper.panel=NULL, text.panel=panel.txt, main="Car Milage Data (unsorted)")

library(corrgram)
corrgram(mtcars, order=TRUE, lower.panel=panel.shade, upper.panel=panel.pie, text.panel=panel.txt, main="Car Milage Data in PC2/PC1 Order")

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2sgZm9yIHRlYWNoaW5nIGdyYXBoaWNzIGF0IE0xIExldmVsIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KIyMjIFBsb3R0aW5nIERhdGEgd2l0aCBSOiBCZWF1dGlmdWwgcGxvdHMgZm9yIHlvdXIgTWFzdGVyDQoNCuS7iuaXpeOBruaOiOalreOBr+ODh+ODvOOCv+OBruOCsOODqeODleOCo+ODg+OCr+OCueOBq+WvvuOBmeOCi+OAgg0K44OH44O844K/44K/44Kk44OX44GM44GK44GK44GE44Gu44Gn44CB5YWo44Gm6Kqs5piO44GM5Ye65p2l44Gq44GE44Go5oCd44GE44G+44GZ44GM44CB44Oh44O844K444Oj44O844Gq44Kw44Op44OV44Kj44OD44Kv44K544KS6Kqs5piO44GX44G+44GZ44CCDQrkv67lo6voq5bjga7ngrrjgavjgIHjgqjjgq/jgrvjg6vjgrDjg6njg5XjgqPjg4Pjgq/jgrnjga/ljYHliIbjgafjga/jgarjgYTjga7jgafjgIHlh7rmnaXjgovjgaDjgZHjgIHjgoLjgYbjgaHjgofjgaPjgajjgrnjg57jg7zjg4jjgarjgrDjg6njg5XjgqPjg4Pjgq/jgrnjgpLkvb/jgaPjgabjgb/jgabkuIvjgZXjgYTjgILjgZPjga7jg5rjg7zjgrjjga/jgZPjga7jgb7jgb7jgafjgZnjgYvjgonjgIHjgb7jgZ/kvb/jgYTjgZ/jgYTmmYLjgavjgIHjgoLjgYbkuIDluqbjgZPjgZPjgavmnaXjgabjgIHjgrPjg7zjg4njgpLjgrPjg7zjg5TjgbrjgZfjgZ/jgonoia/jgYTjgajmgJ3jgYTjgb7jgZnjgIINCg0KDQpUaGlzIGRvY3VtZW50IHdhcyBjb21waWxlZCBmb3IgdGhlIHB1cnBvc2Ugb2YgZWFzaW5nIHlvdXIgbGlmZSB3aXRoIGdldHRpbmcgeW91ciBNc2MgdGhlc2lzIGdyYXBoaWNzIGRvbmUuIFRob3NlIGFyZSBub3QgbXkgb3duIGNyZWF0aW9uIGJ1dCBleGlzdGluZyBsaWJyYXJpZXMgYW5kIGV4YW1wbGVzLiBJbiBlYWNoIGNhc2VzLCBJIGFtIHVzaW5nIHRoZSBmcmVlIGRhdGFzZXRzIHRoYXQgY29tZSB3aXRoIFIgYW5kIGFsc28gcmFuZG9tIG5vcm1hbGl6ZWQgdmFyaWFibGVzIChmdW5jdGlvbiBybm9ybSkuIFlvdSB3aWxsIGp1c3QgbmVlZCB0byBwbHVnIGluIHlvdXIgb3duIGRhdGEgaW4gdGhvc2UgbGluZXMgb2YgY29kZXMuDQrjgZPjga7jg4njgq3jg6Xjg6Hjg7Pjg4jjga/jgIHjgYLjgarjgZ/jga5Nc2Poq5bmlofjga7jgrDjg6njg5XjgqPjg4Pjgq/jgpLku5XkuIrjgZLjgovjgZPjgajjgafjgIHjgYLjgarjgZ/jga7nlJ/mtLvjgpLmpb3jgavjgZnjgovjgZPjgajjgpLnm67nmoTjgajjgZfjgabkvZzmiJDjgZXjgozjgb7jgZfjgZ/jgILjgZPjgozjgonjga/np4HjgYzkvZzmiJDjgZfjgZ/jgoLjga7jgafjga/jgarjgY/jgIHml6LlrZjjga7jg6njgqTjg5bjg6njg6rjgoTjgrXjg7Pjg5fjg6vjgpLkvb/nlKjjgZfjgabjgYTjgb7jgZnjgILjgZ3jgozjgZ7jgozjga7jgrHjg7zjgrnjgafjgIHnp4Hjga9S44Gr5LuY5bGe44GZ44KL54Sh5paZ44Gu44OH44O844K/44K744OD44OI44Go44CB44Op44Oz44OA44Og44Gq5q2j6KaP5YyW5aSJ5pWw77yI6Zai5pWwcm5vcm3vvInjgpLkvb/nlKjjgZfjgabjgYTjgb7jgZnjgILjgZPjgozjgonjga7jgrPjg7zjg4njgavoh6rliIbjga7jg4fjg7zjgr/jgpLlhaXlipvjgZnjgovlv4XopoHjgYzjgYLjgorjgb7jgZnjgIINCg0KRm9yIHRob3NlIG9mIHlvdSB3aG8gYXJlIG5vdCBmYW1pbGlhciB3aXRoIFIsIHlvdSBjYW4gZ2V0IGFjcXVhaW50ZWQgdG8gdGhlIGxhbmd1YWdlLCBieSB1c2luZyBvbmUgb2YgdGhlIGF2YWlsYWJsZSB0dXRvcmlhbCBvbmxpbmUuIERyLiBZYW1hamkgaGFzIGdpdmVuIG1lIHRoZSBsaW5rIHRvIGEgdmVyeSBnb29kIHN0ZXAtYnktc3RlcCB0dXRvcmlhbCBpbiBKYXBhbmVzZSwgd2hpY2ggeW91IGNhbiB1c2U6DQoNCg0KDQojIyAoMSkgR0dQTE9UMg0KDQpSIGhhcyBhIGxvdCBvZiBkaWZmZXJlbnQgdG9vbHMgdGhhdCBhcmUgbmF0aXZlIHRvIHRoZSBwcm9ncmFtbWluZyBlbnZpcm9ubWVudCwgYnV0IHRvIGdldCBiZXR0ZXIgcmVzdWx0cywgeW91IHdhbnQgdG8gdXNlIHNvbWUgb2YgdGhlIGxpYnJhcmllcyB0aGF0IGNhbiBiZSBhZGRlZCB0byBpdC5UaGUgZmlyc3Qgb25lIHdlIGFyZSBnb2luZyB0byBoYXZlIGEgbG9vayBhdCBpcyBnZ3Bsb3Qgb3IgZ2dwbG90MjoNCg0KaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR2dwbG90Mg0KDQpodHRwczovL2thenV0YW4uZ2l0aHViLmlvL2Z1a3Vva2FSMTEvaW50cm9fZ2dwbG90Mi5odG1sICjml6XmnKzoqp7jgacpDQoNCg0KDQoNCmBgYHtyIHdhcm5pbmc9RkFMU0V9DQojIGluc3RhbGwucGFja2FnZXMoImdncGxvdDIiKQ0KIyBpbnN0YWxsLnBhY2thZ2VzKCJocmJydGhlbWVzIikNCg0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShocmJydGhlbWVzKQ0KDQpnZ3Bsb3QoaXJpcywgYWVzKHg9U2VwYWwuTGVuZ3RoLCB5PVNlcGFsLldpZHRoKSkgKyANCiAgICBnZW9tX3BvaW50KCkNCg0KIyBBREQgU09NRSBDT0xPUiBGUk9NIFRIRSBocmJydGhlbWVzDQoNCmdncGxvdChpcmlzLCBhZXMoeD1TZXBhbC5MZW5ndGgsIHk9U2VwYWwuV2lkdGgsIGNvbG9yPVNwZWNpZXMpKSArIA0KICAgIGdlb21fcG9pbnQoc2l6ZT02KSArDQogICAgdGhlbWVfaXBzdW0oKQ0KDQojIEFERCBTT01FIFRSQU5TUEFSRU5DWQ0KDQpnZ3Bsb3QoaXJpcywgYWVzKHg9U2VwYWwuTGVuZ3RoLCB5PVNlcGFsLldpZHRoLCBhbHBoYT1TcGVjaWVzKSkgKyANCiAgICBnZW9tX3BvaW50KHNpemU9NiwgY29sb3I9IiM2OWIzYTIiKSArDQogICAgdGhlbWVfaXBzdW0oKQ0KDQoNCmBgYA0KDQoNClZlcnkgb2Z0ZW4sIHlvdSB3aWxsIGJlIGNvbmZyb250ZWQgdG8gdGhlIG5lZWQgb2YgY3JlYXRpbmcgZ3JhcGhpY3Mgc2hvd2luZyB0aGUgY29ycmVsYXRpb24gYmV0d2VlbiB0d28gb3IgbW9yZSBkYXRhc2V0cy4gT25lIG9mIHRoZSB3YXkgdG8gZG8gdGhhdCBpcyB0byB1c2UgYSBjb3JyZWxhdGlvbiBtYXRyaXguDQoNCg0KYGBge3J9DQojIExpYnJhcmllcw0KIyBpbnN0YWxsLnBhY2thZ2VzKCJnYXBtaW5kZXIiKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShkcGx5cikNCg0KIyBUaGUgZGF0YXNldCBpcyBwcm92aWRlZCBpbiB0aGUgZ2FwbWluZGVyIGxpYnJhcnkNCmxpYnJhcnkoZ2FwbWluZGVyKQ0KZGF0YSA8LSBnYXBtaW5kZXIgJT4lIGZpbHRlcih5ZWFyPT0iMjAwNyIpICU+JSBkcGx5cjo6c2VsZWN0KC15ZWFyKQ0KDQojIE1vc3QgYmFzaWMgYnViYmxlIHBsb3QNCmRhdGEgJT4lDQogIGFycmFuZ2UoZGVzYyhwb3ApKSAlPiUNCiAgbXV0YXRlKGNvdW50cnkgPSBmYWN0b3IoY291bnRyeSwgY291bnRyeSkpICU+JQ0KICBnZ3Bsb3QoYWVzKHg9Z2RwUGVyY2FwLCB5PWxpZmVFeHAsIHNpemUgPSBwb3ApKSArDQogICAgZ2VvbV9wb2ludChhbHBoYT0wLjUpICsNCiAgICBzY2FsZV9zaXplKHJhbmdlID0gYyguMSwgMjQpLCBuYW1lPSJQb3B1bGF0aW9uIChNKSIpDQpgYGANCmBgYHtyfQ0KIyBMaWJyYXJpZXMNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZHBseXIpDQoNCiMgVGhlIGRhdGFzZXQgaXMgcHJvdmlkZWQgaW4gdGhlIGdhcG1pbmRlciBsaWJyYXJ5DQpsaWJyYXJ5KGdhcG1pbmRlcikNCmRhdGEgPC0gZ2FwbWluZGVyICU+JSBmaWx0ZXIoeWVhcj09IjIwMDciKSAlPiUgZHBseXI6OnNlbGVjdCgteWVhcikNCg0KIyBNb3N0IGJhc2ljIGJ1YmJsZSBwbG90DQpkYXRhICU+JQ0KICBhcnJhbmdlKGRlc2MocG9wKSkgJT4lDQogIG11dGF0ZShjb3VudHJ5ID0gZmFjdG9yKGNvdW50cnksIGNvdW50cnkpKSAlPiUNCiAgZ2dwbG90KGFlcyh4PWdkcFBlcmNhcCwgeT1saWZlRXhwLCBzaXplPXBvcCwgY29sb3I9Y29udGluZW50KSkgKw0KICAgIGdlb21fcG9pbnQoYWxwaGE9MC41KSArDQogICAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoLjEsIDI0KSwgbmFtZT0iUG9wdWxhdGlvbiAoTSkiKQ0KYGBgDQoNCg0KIyBUSU1FIFNFUklFUyBEQVRBOg0KDQpgYGB7cn0NCiMgTGlicmFyaWVzDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGRwbHlyKQ0KDQojIER1bW15IGRhdGENCmRhdGEgPC0gZGF0YS5mcmFtZSgNCiAgZGF5ID0gYXMuRGF0ZSgiMjAxNy0wNi0xNCIpIC0gMDozNjQsDQogIHZhbHVlID0gcnVuaWYoMzY1KSArIHNlcSgtMTQwLCAyMjQpXjIgLyAxMDAwMA0KKQ0KDQojIE1vc3QgYmFzaWMgYnViYmxlIHBsb3QNCnAgPC0gZ2dwbG90KGRhdGEsIGFlcyh4PWRheSwgeT12YWx1ZSkpICsNCiAgZ2VvbV9saW5lKCkgKyANCiAgeGxhYigiIikNCnANCmBgYA0KDQoNCiMgQ09SUkVMQVRJT04gTUFUUklDRVM6DQoNCkluIHRoaXMgc2VjdGlvbiwgd2UgYXJlIHVzaW5nIHRoZSBHR2FsbHkgcGFja2FnZSBpbiBSLg0KDQpgYGB7cn0NCiMgaW50YWxsLnBhY2thZ2VzKCJHR2FsbHkiKQ0KbGlicmFyeShHR2FsbHkpDQoNCmRhdGEgPC0gZGF0YS5mcmFtZSggdmFyMSA9IDE6MTAwICsgcm5vcm0oMTAwLHNkPTIwKSwgdjIgPSAxOjEwMCArIHJub3JtKDEwMCxzZD0yNyksIHYzID0gcmVwKDEsIDEwMCkgKyBybm9ybSgxMDAsIHNkID0gMSkpIA0KZGF0YSR2NCA9IGRhdGEkdmFyMSAqKiAyIA0KZGF0YSR2NSA9IC0oZGF0YSR2YXIxICoqIDIpIA0KDQpnZ3BhaXJzKGRhdGEsIHRpdGxlPSJjb3JyZWxvZ3JhbSB3aXRoIGdncGFpcnMoKSIpIA0KYGBgDQoNCg0KYGBge3J9DQpkYXRhKHRpcHMsIHBhY2thZ2UgPSAicmVzaGFwZSIpDQpnZ3BhaXJzKA0KICB0aXBzWywgYygxLCAzLCA0LCAyKV0sDQogIHVwcGVyID0gbGlzdChjb250aW51b3VzID0gImRlbnNpdHkiLCBjb21ibyA9ICJib3hfbm9fZmFjZXQiKSwNCiAgbG93ZXIgPSBsaXN0KGNvbnRpbnVvdXMgPSAicG9pbnRzIiwgY29tYm8gPSAiZG90X25vX2ZhY2V0IikNCikNCmBgYA0KDQpgYGB7cn0NCmdnY29ycihkYXRhLCBtZXRob2QgPSBjKCJldmVyeXRoaW5nIiwgInBlYXJzb24iKSkgDQpgYGANCg0KDQpgYGB7cn0NCmRhdGEoZmxlYSkNCmdncGFpcnMoZmxlYSwgY29sdW1ucyA9IDI6NCwgZ2dwbG90Mjo6YWVzKGNvbG91cj1zcGVjaWVzKSkgDQpgYGANCg0KIyBDb3JyZWxvZ3JhbQ0KDQpgYGB7cn0NCmxpYnJhcnkoY29ycmdyYW0pDQpjb3JyZ3JhbShtdGNhcnMsIG9yZGVyPU5VTEwsIGxvd2VyLnBhbmVsPXBhbmVsLnNoYWRlLCB1cHBlci5wYW5lbD1OVUxMLCB0ZXh0LnBhbmVsPXBhbmVsLnR4dCwgbWFpbj0iQ2FyIE1pbGFnZSBEYXRhICh1bnNvcnRlZCkiKQ0KYGBgDQoNCmBgYHtyfQ0KbGlicmFyeShjb3JyZ3JhbSkNCmNvcnJncmFtKG10Y2Fycywgb3JkZXI9VFJVRSwgbG93ZXIucGFuZWw9cGFuZWwuc2hhZGUsIHVwcGVyLnBhbmVsPXBhbmVsLnBpZSwgdGV4dC5wYW5lbD1wYW5lbC50eHQsIG1haW49IkNhciBNaWxhZ2UgRGF0YSBpbiBQQzIvUEMxIE9yZGVyIikgDQpgYGANCg0K