R的ggplot2包画面积图?

By 陆勤 at 2019-03-06 • 0人收藏 • 231人看过

面积图(area plot)用来显示某时间段内量化数值的变化和发展,最常用来显示趋势,而非表示具体的数值。


一 基本面积图


# R包
library(ggplot2)
# 数据准备
set.seed(201903)
df <- data.frame(
  sex=factor(rep(c("F", "M"), each=200)),
  weight=round(c(rnorm(200, mean=55, sd=5),
                 rnorm(200, mean=65, sd=5)))
)

p <- ggplot(data = df, mapping = aes(x = weight))
# 1 基本面积图
p + geom_area(stat = "bin")

# 2 y轴为密度值
p + geom_area(aes(y = ..density..), stat = "bin")

# 3 添加均值线
p + geom_area(stat = "bin", fill = "lightblue") +
  geom_vline(aes(xintercept = mean(weight)), 
             color = "blue", 
             linetype = "dashed", 
             size = 1)

1 的图形结果

面积图1.png


2的图形结果

面积图2.png

3的图形结果

面积图3.png


二 改变面积图中线的类型和颜色

# 1 改变线的颜色和填充的颜色
p + geom_area(
  stat = "bin",
  color = "darkblue",
  fill = "lightblue"
)

# 2 改变线的类型
p + geom_area(
  stat = "bin",
  color = "black",
  fill = "lightgrey",
  linetype = "dashed"
)

1的图形结果

面积图4.png

2的图形结果

面积图5.png


三 分组面积图

library(plyr)
mu <- ddply(df, "sex", summarise, grp.mean = mean(weight))
mu
# 或者
library(tidyverse)
mu1 <- df %>% 
  group_by(sex) %>% 
  summarise(grp.mean = mean(weight))
mu1


# 1 通过分组改变面积的填充颜色
ggplot(data = df, mapping = aes(x = weight, fill = sex)) +
  geom_area(stat = "bin")

# 2 使用半透明填充
p <- ggplot(data = df, mapping = aes(x = weight, fill = sex)) +
  geom_area(stat = "bin", alpha = 0.6) +
  theme_classic()
p

# 3 添加均值曲线
p + geom_vline(
  data = mu,
  aes(xintercept = grp.mean, color = sex),
  linetype = "dashed"
)

1的图形结果

面积图6.png

2的图形结果

面积图7.png

3的图形结果

面积图8.png


四 面积图填充颜色定制化


# 1 使用自定义调色板
p + scale_fill_manual(values=c("#999999", "#E69F00")) 

# 2 使用brewer调色板
p + scale_fill_brewer(palette="Dark2") 

# 使用灰度填充
p + scale_fill_grey()

1的图形结果

面积图9.png


2的图形结果

面积图10.png


3的图形结果

面积图11.png


五 改变面积图中图例的位置


# 1 图例位置在上方
p + theme(legend.position = "top")
# 2 图例位置在底部
p + theme(legend.position = "bottom")
# 3 移除图例
p + theme(legend.position = "none")

1的图形结果

面积图12.png

2的图形结果

面积图13.png

3的图形结果


面积图14.png


六 分面板展示面积图


# 1 用facet_grid函数实现分面板展示面积图
p <- ggplot(data = df, mapping = aes(x = weight)) +
  geom_area(stat ="bin") +
  facet_grid(sex ~ .)
p
# 2 添加均值曲线
p + geom_vline(data=mu, aes(xintercept=grp.mean, color="red"),
             linetype="dashed")


1的图形结果

面积图15.png

2的图形结果

面积图16.png

参考资料:

1 ggplot2与面积图




登录后方可回帖

信息栏
数据人网是数据人学习、交流和分享的平台,专注于从数据中学习,努力发觉数据之洞见,积极利用数据之价值
Loading...