ggchartsを試す
ggchartsとは
Rのggplot2
のラッパーで、aes
+ geom_xxx
の形式ではなく、pythonのseaborn
やplotly_express
みたいにグラフ関数を用いて表現をすることができる。ラッパーなので、通常の書き方を組み合わせることができるので、ggplot2
の機能が追加されただけと考えてもよさそう。
また、各グラフ関数では上位x位のみやハイライトなど、ggplot2
のままだと面倒な作業の一部は引数でおこなえるようになっている。
APIリファレンス
Chart
基本的にドキュメントのExampleをトレース
各ファセットのrevenue
Top10のみをを表示し、昇順にしたい。
ggplot2
で通常通り行うと、year毎にgroup_by
してtop_n
でrevenueのTop10を抽出をおこない、companyをreorder_within
でyearと結合しつつ並び替える。
この前処理をしてから、ggplot2
でcoord_flip
で軸を反転させたりscale_x_reordered
で並び替えたりと、地味にめんどい。
library(dplyr) library(ggplot2) library(ggcharts) data("biomedicalrevenue") data(biomedicalrevenue) revenue2016 <- biomedicalrevenue[biomedicalrevenue$year == 2016, ] revenue_roche <- biomedicalrevenue[biomedicalrevenue$company == "Roche", ] biomedicalrevenue %>% filter(year %in% c(2012, 2015, 2018)) %>% group_by(year) %>% top_n(10, revenue) %>% ungroup() %>% mutate(company = tidytext::reorder_within(company, revenue, year)) %>% ggplot(aes(company, revenue)) + geom_col() + coord_flip() + tidytext::scale_x_reordered() + facet_wrap(vars(year), scales = "free_y")
ggcharts
だと簡単に作成ができる。
biomedicalrevenue %>% filter(year %in% c(2012, 2015, 2018)) %>% bar_chart(x = company, y = revenue, facet = year, top_n = 10)
lollipop_chart
という、ggcharts
のオサレ棒グラフがあるが前述のようにggplot2
の書き方で追記ができる。以下の例ではlabs
とscale_y_continuous
はggplot2
での見た目設定の仕方と同じ。
biomedicalrevenue %>% filter(year == 2018) %>% lollipop_chart(x = company, y = revenue, threshold = 30) + labs( x = NULL, y = "Revenue", title = "Biomedical Companies with Revenue > $30Bn." ) + scale_y_continuous( labels = function(x) paste0("$", x, "Bn."), expand = expansion(mult = c(0, .05)) )
他にも色々な関数があるのでgallery見ると楽しい。
bar_chart
bar_chart(biomedicalrevenue, company, revenue, facet = year, top_n = 10, highlight = "Roche")
軸の逆転
column_chart(biomedicalrevenue, company, revenue, facet = year, top_n = 10, highlight = "Roche")
lollipop_chart
lollipop_chart(revenue2016, company, revenue, point_color = "darkgreen", line_color = "gray")
diverging_bar_chart
data(mtcars) mtcars_z <- dplyr::transmute( .data = mtcars, model = row.names(mtcars), hpz = scale(hp) ) diverging_bar_chart(mtcars_z, model, text_size = 14, hpz, text_color = c("#1F77B4", "#FF7F0E"), bar_color = c("#1F77B4", "#FF7F0E"))
diverging_lollipop_chart
diverging_lollipop_chart(mtcars_z, model, hpz, text_size = 14, text_color = c("#1F77B4", "#FF7F0E"), lollipop_colors = c("#1F77B4", "#FF7F0E"))
dumbbell_chart
data(popeurope) dumbbell_chart(popeurope, country, pop1952, pop2007, top_n = 10, line_size = 2, point_size = 5, legend_labels = c("1952", "2007"), # ラベル名変更 line_color = "lightgray", point_color = c("lightgray", "black"))
data(popch) pyramid_chart(popch, age, pop, sex, xlab = "Population", title = "Switzerland 2020", bar_colors = c("blue", "red"))
highlight_spec
各グラフ関数内でhighlight引数でハイライトしたい文字を指定すると、変数のその文字のグラフがハイライトされる。
このとき、highlight_spec
関数を使うと、文字と色の組み合わせも指定できる。
spec <- highlight_spec(c("Bayer", "AstraZeneca"), c("darkgreen", "darkorange")) bar_chart(revenue2018, company, revenue, highlight = spec)
theme
テーマはtheme_ggcharts
theme_hermit
theme_ng
theme_nightblue
の4種類ある。
library(patchwork) scatter <- ggplot(mtcars, aes(hp, mpg)) + geom_point(color = "red") g1 = scatter + theme_ggcharts(grid = "XY", axis = "XY", ticks = "XY") g2 = scatter + theme_hermit(grid = "XY", axis = "XY", ticks = "XY") g3 = scatter + theme_ng(grid = "XY", axis = "XY", ticks = "XY") g4 = scatter + theme_nightblue(grid = "XY", axis = "XY", ticks = "XY") (g1|g2)/(g3|g4)
参考
R-bloggerの紹介記事