本文主要介绍如何利用ggplot2绘制多重折线图与堆积面积图。效果如下图所示:
1、数据准备
以pedquant包中的dt_banks数据集为例,该数据集包含我国五大行2008-2017年股价数据,绘制不同银行股价在该时间段内的折线图与面积图。
library(pedquant)
library(ggplot2)
library(dplyr)
dt_banks <- pedquant::dt_banks
table(dt_banks$name) %>% as.data.frame()
Var1 Freq
#1 DR交通银 1
#2 N农行 1
#3 XD工商银 10
#4 XD建设银 11
#5 XD交通银 12
#6 XD农业银 7
#7 XD中国银 10
#8 XR工商银 1
#9 XR建设银 1
#10 XR交通银 1
#11 XR中国银 1
#12 工商银行 2405
#13 建设银行 2407
#14 交通银行 2405
#15 农业银行 1804
#16 中国银行 2407
#名称合并
dt_banks$name <- ifelse(dt_banks$name %in% c("DR交通银","XD交通银", "XR交通银") ,"交通银行", dt_banks$name)
dt_banks$name <- ifelse(dt_banks$name %in% c("XR中国银","XD中国银"), "中国银行", dt_banks$name)
dt_banks$name <- ifelse(dt_banks$name %in% c("XR工商银","XD工商银"), "工商银行", dt_banks$name)
dt_banks$name <- ifelse(dt_banks$name %in% c("XD建设银","XR建设银"), "建设银行", dt_banks$name)
dt_banks$name <- ifelse(dt_banks$name %in% c("XD农业银","N农行"), "农业银行", dt_banks$name)
table(dt_banks$name) %>% as.data.frame()
# Var1 Freq
#1 工商银行 2416
#2 建设银行 2419
#3 交通银行 2419
#4 农业银行 1812
#5 中国银行 2418
#转换为标准时间
dt_banks$date <- lubridate::parse_date_time(dt_banks$date, "%y-%m-%d")
#提取数据
banks.df <- dt_banks %>% filter(name %in% c("交通银行", "中国银行", "工商银行", "建设银行"))
head(banks.df)
# symbol name date open high low close close_prev change_pct volume amount turnover cap_market cap_total unit
#1: 601328.SS 交通银行 2010-01-04 9.40 9.44 9.14 9.16 9.35 -2.0321 114165487 1058538519 0.7156 146147185538 448788554719 CNY
#2: 601328.SS 交通银行 2010-01-05 9.19 9.52 9.12 9.39 9.16 2.5109 155501284 1453744070 0.9746 149816820109 460057262971 CNY
#3: 601328.SS 交通银行 2010-01-06 9.30 9.50 9.23 9.26 9.39 -1.3845 100955105 943772567 0.6328 147742678830 453687993090 CNY
#4: 601328.SS 交通银行 2010-01-07 9.23 9.27 8.90 8.94 9.26 -3.4557 123883509 1124824187 0.7765 142637100296 438009790305 CNY
#5: 601328.SS 交通银行 2010-01-08 8.90 9.11 8.85 8.99 8.94 0.5593 81152598 730689208 0.5086 143434846942 440459509490 CNY
#6: 601328.SS 交通银行 2010-01-11 9.77 9.77 8.96 9.00 8.99 0.1112 150314586 1397224349 0.9421 143594396271 440949453327 CNY
2、图形绘制
2.1 基础图形
以date(日期)为x轴变量,close(收盘价)为y轴变量,name(名称)为fill或color映射变量,绘制多重折线图与堆积面积图。
#设置主题
theme_set(theme_minimal() + theme(legend.position = c(0.85, 0.85), legend.title = element_blank()))
#多重折线图
ggplot(banks.df, aes(date, close, color = name)) +
geom_line()
#堆积面积图
ggplot(banks.df, aes(date, close, fill = name)) +
geom_area()

2.2 图形修饰
对绘图函数做进一步调整。
#多重折线图
ggplot(banks.df, aes(date, close, color = name)) +
geom_line(lwd = 1.2, linetype = 1) +
scale_y_continuous(breaks = seq(0, 16, 2)) +
scale_x_datetime(date_breaks = "1 year", date_labels = "%Y", expand = c(0.01, 0)) +
scale_color_brewer(palette = "Set1")
#堆积面积图
ggplot(banks.df, aes(date, close, fill = name)) +
geom_area(color = alpha("black", 0.6)) +
scale_x_datetime(date_breaks = "1 year", date_labels = "%Y", expand = c(0.01, 0)) +
scale_fill_brewer(palette = "Set1")

3、其他
关于R语言绘制面积图可进一步参考R语言绘图|面积图。其他绘图方法可进一步阅读公众号其他文章。
如有帮助请多多点赞哦!
文章转载自日常分享的小懒猫,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




