8.6 折线图(line chart)
8.6.1 认识折线图
折线图用于在连续间隔或时间跨度上显示定量数值,最常用来显示趋势和关系(与其他折线组合起来)。
折线图通常用于展示两个连续变量之间的依存关系,要绘制折线图,先在笛卡尔座标上定出数据点,然后用直线把这些点连接起来。
在折线图中,X轴包括类别型或者序数型变量,分别对应文本坐标轴和序数坐标轴(如日期坐标轴)两种类型;Y轴为数值型变量。折线图主要应用于时间序列数据的可视化。负值可以显示在 X 轴下方。
8.6.2 绘制折线图
data1 %>%
ggplot(aes(x = v1, y = v2)) + geom_line() # 基本折线图。
data1 %>%
ggplot(aes(x = v1, y = v2)) + geom_line(linetype = "dashed", size = 1, colour = "red") # 线参数调节。
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.## ℹ Please use `linewidth` instead.
data1 %>%
ggplot(aes(x = v1, y = v2)) + geom_line() + geom_point() # 添加数据标记,点线图。
data1 %>%
ggplot(aes(x = v1, y = v2)) + geom_line() + geom_point(shape = 21, size = 5, fill = "red") # 数据标记参数调节。
data1 %>%
ggplot(aes(x = v1, y = v2, colour = nitrogen)) + geom_line() + geom_point() # 分组点线图。颜色映射给分组。
data1 %>%
ggplot(aes(x = v1, y = v2, colour = nitrogen, linetype = nitrogen)) + geom_line() + geom_point() # 分组点线图。颜色和线型均映射给分组。
data1 %>%
ggplot(aes(x = v1, y = v2, shape = nitrogen, colour = nitrogen)) + geom_line() + geom_point() # 数据标记形状映射给分组。
data1 %>%
ggplot(aes(x = v1, y = v2, colour = nitrogen)) + geom_line() + geom_ribbon(aes(ymin = v2 - 0.1, ymax = v2 + 0.1), alpha = 0.3) # 给线添加置信域,这里的置信域是我自定义的。
面积图(area graph):又叫区域图,是在折线图的基础之上形成的,它将折线图中的折线与自变 量坐标轴之间的区域使用颜色或者纹理填充(填充区域称为“面积”),这样可以更好地突出趋势信息,同时让图表更加美观。跟折线图一样,面积图可显示某时间段内量化数值的变化和发展,最常用来显示趋势,而非表示具体数值。
面积图可分为普通面积图,堆积面积图,百分比堆积面积图三类。
普通面积图:显示各种数值随时间或类别变化的趋势线。
堆积面积图:显示每个数值所占大小随时间或类别变化的趋势线。可强调某个类别交于系列轴上的数值的趋势线。
百分比堆积面积图:显示每个数值所占百分比随时间或类别变化的趋势线。可强调每个系列的比例趋势线。
下面用R内置数据集airquality为例绘制面积图,airquality数据集记录了纽约1973年5-9月每日空气质量。
data5 <- airquality # 提取数据集。head(data5) # 查看数据集。
## Ozone Solar.R Wind Temp Month Day
## 1 41 190 7.4 67 5 1
## 2 36 118 8.0 72 5 2
## 3 12 149 12.6 74 5 3
## 4 18 313 11.5 62 5 4
## 5 NA NA 14.3 56 5 5## 6 28 NA 14.9 66 5 6
glimpse(data5) # 查看数据结构。
## Rows: 153
## Columns: 6
## $ Ozone <int> 41, 36, 12, 18, NA, 28, 23, 19, 8, NA, 7, 16, 11, 14, 18, 14, …
## $ Solar.R <int> 190, 118, 149, 313, NA, NA, 299, 99, 19, 194, NA, 256, 290, 27…
## $ Wind <dbl> 7.4, 8.0, 12.6, 11.5, 14.3, 14.9, 8.6, 13.8, 20.1, 8.6, 6.9, 9…
## $ Temp <int> 67, 72, 74, 62, 56, 66, 65, 59, 61, 69, 74, 69, 66, 68, 58, 64…
## $ Month <int> 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,…## $ Day <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,…
data5 %>%
ggplot(aes(x = Day, y = Temp)) + geom_area() # 普通面积图。
data5 %>%
ggplot(aes(x = Day, y = Temp, fill = factor(Month))) + geom_area() # 堆积面积图。
data5 %>%
ggplot(aes(x = Day, y = Temp, fill = factor(Month))) + geom_area(colour = "black", linewidth = 0.2, alpha = 0.4) # 堆积面积图区域间添加细线,并将填充区域透明度调低。
data5.1 <- data5 %>% group_by(Day, Month) %>% summarise(Tempmean = mean(Temp)) %>% mutate(Temppercent = Tempmean/sum(Tempmean)*100) # 求算Temp百分比。
## `summarise()` has grouped output by 'Day'. You can override using the `.groups`## argument.
data5.1 %>%
ggplot(aes(x = Day, y = Temppercent, fill = factor(Month))) + geom_area(position = "fill") # 绘制百分比面积图。
参考资料
ggplot2: 数据分析与图形艺术,西安交通大学出版社,2013.
R语言数据可视化之美:专业图表绘制指南,电子工业出版社,2019.
R数据科学,人民邮电出版社,2018.
R数据可视化手册,人民邮电出版社,2014.
什么是面积图?面积图有什么作用?https://zhuanlan.zhihu.com/p/87014671
本文使用 文章同步助手 同步