有多组数据需要观察数据的演变趋势时可以通过绘制带散点的折线图予以展示。下面介绍一个实例。
1. 原始数据:line_chart_with_scatter_points.txt
2. R代码
a. 读取原始数据
用melt函数整理成作图所需的长数据格式,用aggregate函数得到作折线图所需的各组均值数据。
library(reshape2)
library(ggplot2)
library(ggbeeswarm)
time_group <- melt(read.table("line_chart_with_scatter_points.txt", sep="\t", header=TRUE, stringsAsFactors=TRUE, fileEncoding = "utf-8"), id.vars="组别", variable.name="观察时间", value.name="分值")
line_data <- aggregate(分值~观察时间+组别, time_group, mean)
b. 添加楷体格式
library(showtext)
font_add("Kaiti", "C:/Windows/Fonts/simkai.ttf")
showtext_auto()
c. 作图
用geom_beeswarm做蜂群散点图的好处在于可以将原始重合的点通过增加随机偏移量而错开。
p <- ggplot() +
geom_beeswarm(data=time_group, aes(x=观察时间, y=分值, colour=组别), size=1.5) +
geom_line(data=line_data, aes(x=观察时间, y=分值, group=组别, colour=组别), linewidth=0.8) +
theme_bw()+
theme(panel.grid.major=element_line(colour=NA),
panel.background = element_rect(fill = "transparent",colour = NA),
plot.background = element_rect(fill = "transparent",colour = NA),
panel.grid.minor = element_blank(),
axis.title = element_text(size=rel(1.2), family = 'Kaiti'),
axis.text=element_text(size=rel(0.7), family = 'Kaiti'),
legend.text=element_text(size=rel(1), family = 'Kaiti'),
legend.title=element_text(size=rel(1.5), family = 'Kaiti'),
legend.spacing.x = unit(0, "pt"))
d. 保存图形
ggsave("line_chart_with_scatter_points.tiff", p)