Rの標準のplotよりも,文法構造がわかりやすい。
install.packages("tidyverse")
library(tidyverse)
データはtidy dataにしておく。
p<-ggplot(data) +
geom_line(mapping=aes(x=time,y=temperature))
ggplot()
geom_なんとか()
geom_line()
, geom_point()
,他にもいろいろあるaes()
を使って,各座標軸に対応する列名や,描画色等を指定なにかの量の平均(mean)と標準偏差(sd)の列があれば,mean±SDの領域の描画もできる。
p<-ggplot(data) %>%
geom_line(aes_string(x=time,y=mean))
q<-geom_ribbon(aes_string(x=mean, ymin=mean-sd, ymax=mean+sd), alpha=0.2)
print(p+q)
上記のようにグラフレイヤの重ね合わせは足し算でできる。
いろんなグラフを作るための関数一覧(cheatsheet)は ggplot2にある。
とりあえず何列かに整列させれば良いときはこれが便利。
install.packages("Rmisc")
library(Rmisc)
ただし,Rmiscはtidyverseより先に読み込むこと。 Rmiscを後に読み込むと,tplyr::summariseがRmisc::summariseで上書きされてしまう。
multiplot(g1,g2,g3,g4,cols=2) # 2列に並べる
multiplot(g1,g2,g3,cols=2,layout=c(1,2,3,3)) # 上半分にg1とg2, 下半分にg3
cowplotはggplot2のアドオンパッケージ。 “The cowplot package is meant to provide a publication-ready theme for ggplot2"とのことで,綺麗なテーマ設定を使える。特に,グラフ配置機能も充実。
library(tidyverse)
library(cowplot)
ggplot2純正の方法。個々のグラフにラベルを張ったり,同じグラフをすべてのグラフに重ねたり等にはfacet_wrapper()
が便利。
ggpubrは,ggplot2のwrapperで,
名称は”‘ggplot2’ Based Publication Ready Plots"の省略形。
ggplot2よりも簡単にグラフ作成ができる。
また,ggpubr
のfacet
使うと,座標軸の位置やタイトル位置を揃えたりできる。
options(repr.plot.width=8, repr.plot.height=4)
ggplot(...)+...
これでjupyter上でのグラフの大きさや余白を調整できる。
draw_graph<-function(data,xcol="xname",ycol="yname",group="city"){
data %>% ggplot() +
plot_line(aes_string(x=xcol,y=ycol,group=group,color=group))
}
aes_string()
のかわりにaes_q()
を使う方法もある。
aes_q(x=as.name(xcol),y=as.name(group))
ただし,group分けに使う列がnumericだと,gradient colormapしか使えなくい。 無理やり discrete colormap を与えようとすると”Error: Continuous value supplied to discrete scale”と怒られる。group情報のある列をcharacterに変換しておくのが,多分一番簡単。
q<- data %>%
mutate_at(vars(matches(group)),as.character) %>%
ggplot() %>%
geom_line(mapping=aes_string(x=xcol,y=ycol,group=group,color=group))
`+.uneval` <- function(a,b) {
`class<-`(modifyList(a,b), "uneval")
}
ここにあった方法。
aes()+aes_string()
とでようになる。
データに,異なる線であることを判別できる列を作っておく。 気温変化データに(city,time,temerature)のデータ列があって, 都市(city) ごとに異なる線を描くには以下のようにする。
p<-data %>% arrange(city,time) %>%
ggplot() %>%
plot_line(aes_string(x=time,y=temperature,group=city,color=city))
print(p)
p<-ggplot(data1) +
geom_line(aes_string(x=time,y=temperature))
p2<-geom_line(data2, mapping=aes(x=time,y=humidity))
print(p1+p2)
方法1: gganimateを使う。
方法2:
plotlyの関数animation_opts()
を使う。
参考URL