ggridge是什么

ggridge(原名ggjoy),是R语言著名可视化套件ggplot2的一个增强包。ridge提供了类似于山峦迭起,用以描述空间和时间的变化(be quite useful for visualizing changes in distributions over time or space)。

它提供了三种基本的绘图形式:

  • geom_ridgeline(底部填充的折线图)
  • geom_joy(交错排列的密度图)
  • geom_joy2(较前者而言,图形与坐标轴闭合)

图-1

为什么要用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()

图-3

怎么用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)

图-2

希望越来越多的具备统计学意义的图形可以能够更接地气的被大家所用。