ggridge是什么
ggridge(原名ggjoy),是R语言著名可视化套件ggplot2的一个增强包。ridge提供了类似于山峦迭起,用以描述空间和时间的变化(be quite useful for visualizing changes in distributions over time or space)。
它提供了三种基本的绘图形式:
- geom_ridgeline(底部填充的折线图)
- geom_joy(交错排列的密度图)
- geom_joy2(较前者而言,图形与坐标轴闭合)
为什么要用ggridge
- ggridge本质上是density,比boxplot数据特征更加直观
- 提供了分组连续对比
- 作图面积利用率高
- 更高的美学价值
当然想要了解每个月的产量趋势,仍然可以可以使用采用了分面技术的折线图。
ggplot(df2, aes(x = date, y = num)) +
geom_line() +
facet_wrap(~ mon, nrow = 4, scales = "free_x") +
scale_x_date(date_labels = "%m-%d") +
theme_bw()
怎么用ggridge
想要做出12个月生产波动的对比图,
先来看一下数据集,df是dataframe
结构:
date
代表从2016-01-01到2016-12-31的日历numbers
是当日对应的生产量mon
是对date进一步的处理,代表具体的月份。
head(df, n=10)
# date numbers mon
# 1 2016-01-01 689 01
# 2 2016-01-03 496 01
# 3 2016-01-03 714 01
# 4 2016-01-03 202 01
# 5 2016-01-03 246 01
# 6 2016-01-03 357 01
# 7 2016-01-03 246 01
# 8 2016-01-03 744 01
# 9 2016-01-03 450 01
# 10 2016-01-03 662 01
数据需要进一步处理以达到作图要求,需要按照月份对同一日的生产记录进行汇总,对R来说非常容易。
library(dplyr)
df2 <- df %>%
group_by(date, mon) %>%
summarize(num = sum(numbers))
# > head(df2, n = 10)
# # A tibble: 10 x 3
# date num mon
# <date> <dbl> <chr>
# 1 2016-01-01 689 01
# 2 2016-01-03 4975 01
# 3 2016-01-04 6093 01
# 4 2016-01-05 3969 01
# 5 2016-01-06 2645 01
# 6 2016-01-07 3488 01
# 7 2016-01-08 2261 01
# 8 2016-01-09 5030 01
# 9 2016-01-11 7359 01
# 10 2016-01-12 9066 01
阅读ggridge的文档,需要确定x轴、y轴、group字段(单一的ridgeline图不需要),在这里我们确定,x轴为数值,y轴是分组后的月份。
library(ggplot2)
library(ggjoy)
library(gridExtra)
P1 <- ggplot(df2, aes(x = num, y = mon, group = as.factor(mon), fill = ..x..)) +
geom_joy_gradient(scale = 3, rel_min_height = 0.01, gradient_lwd = 1) +
scale_x_continuous(expand = c(0.01, 0)) +
scale_y_discrete(expand = c(0.01, 0)) +
theme_joy(font_size = 13, grid = TRUE) +
theme(axis.title.y = element_blank()) +
labs(x = "Production numbers", y = "Election Year", title = "Production of 2016", subtitle = "From 2016-01 to 2016-12", caption = "Toll CI@XiaoWei")
P2 <- ggplot(df2, aes(y = num, as.factor(mon))) + geom_boxplot() +
labs(x = "Month", y = "Produce amounts")
grid.arrange(P1, P2, ncol = 2)
希望越来越多的具备统计学意义的图形可以能够更接地气的被大家所用。