数据可视化——R语言ggplot2包绘制箱线图叠加散点图
概述: 当每个组的数据点相对较少时,又需要显示出各组数据的分布情况时,可以采用箱线图叠加散点图的方式来表达数据。
使用工具:R语言中的ggplot2工具包
箱线图叠加散点图是数据表达中常用的一种方式。ggplot2包支持图形叠加,可以很好的实现我们想要的效果。
由于使用ggpolt2包绘制的箱线图的胡须末端没有短横线,可以采用误差条图来绘制箱线图胡须末端没有短横线。因此,可采用三个图层叠加实现:误差条图+箱线图+散点图。
以下示例中的数据来自汽车数据mtcars,将汽车发动机的缸数cyl因子化后作为分组变量,每组对应的数据为每加仑汽油行驶的英里数mpg。
示例代码如下:
rm(list = ls()) #清除工作区library(ggplot2)
library(RColorBrewer)###################################################
#导入数据
#使用并列箱线图叠加散点图表示四缸,六缸,八缸发动机对每加仑汽油行驶的英里数
#Group:为因子变量,表示汽车发动机的缸数
#Value:为连续变量,表示对每加仑汽油行驶的英里数
attach(mtcars)
Data1 = data.frame(Group = mtcars$cyl,Value = https://www.it610.com/article/mtcars$mpg)
Data1$Group = factor(Data1$Group,levels = c(4,6,8))
####################################################使用ggplot2包生成箱线图
P1 <- ggplot(Data1,aes(x=Group,y=Value,fill=Group))+ #”fill=“设置填充颜色
stat_boxplot(geom ="errorbar",width=0.15,aes(color="black"))+ #由于自带的箱形图没有胡须末端没有短横线,使用误差条的方式补上
geom_boxplot(size=0.5,fill="white",outlier.fill="white",outlier.color="white")+ #size设置箱线图的边框线和胡须的线宽度,fill设置填充颜色,outlier.fill和outlier.color设置异常点的属性
geom_jitter(aes(fill=Group),width =0.2,shape = 21,size=2.5)+ #设置为向水平方向抖动的散点图,width指定了向水平方向抖动,不改变纵轴的值
scale_fill_manual(values = c("#E69F00", "#0072B2","#F0E442"))+#设置填充的颜色
scale_color_manual(values=c("black","black","black"))+ #设置散点图的圆圈的颜色为黑色
ggtitle("Car Milleage Data")+ #设置总的标题
theme_bw()+ #背景变为白色
theme(legend.position="none", #不需要图例
axis.text.x=element_text(colour="black",family="Times",size=14), #设置x轴刻度标签的字体属性
axis.text.y=element_text(family="Times",size=14,face="plain"), #设置x轴刻度标签的字体属性
axis.title.y=element_text(family="Times",size = 14,face="plain"), #设置y轴的标题的字体属性
axis.title.x=element_text(family="Times",size = 14,face="plain"), #设置x轴的标题的字体属性
plot.title = element_text(family="Times",size=15,face="bold",hjust = 0.5), #设置总标题的字体属性
panel.grid.major = element_blank(), #不显示网格线
panel.grid.minor = element_blank())+
ylab("Miles Per Gallon")+xlab("Number of Cylinders") #设置x轴和y轴的标题
P1
#图片保存
jpeg(file = "boxplot.jpg",width =1400,height = 1600,units = "px",res =300) #结果保存
print(P1)
dev.off()
示例结果如下:
文章图片
箱线图叠加散点图 需要注意的是:图层叠加的先后顺序会影响绘制的结果,本示例中从底层开始的图层顺序依次为:误差条图,箱线图,散点图,误差条图处于最底层,会被填充为白色的箱线图覆盖其中间部分,散点图处于最上方,也会覆盖箱线图的内容。
【R语言数据可视化|数据可视化——R语言ggplot2包绘制箱线图叠加散点图】另外:
- 散点图需要使用抖动的方式绘制,以避免重叠,示例中横轴为分组变量,纵轴为实际关心的值,设置抖动时需避免纵轴的值被改变,所以geom_jitter函数中仅需设置width,不设置height。
- 如果数据中存在异常点时,箱线图也会绘制出异常点,而散点图又会绘制所有的点,使得每个异常点被绘制了两次,可以通过在绘制箱线图时将异常点的颜色设定为与背景色相同即可(使其在箱线图中不可见)。
推荐阅读
- ggplot|R语言ggplot在一张图里同时画散点图和折线图
- 机器学习|河南郑州二手房房价预测
- 新品发布会|数据可视化编辑平台上线,小程序也能拥有可视化图层
- 数据分析|数据分析学习1——数据获取,单因子探索分析与可视化
- 数据可视化|基于ECharts数据可视化案例--世界疫情实时展示
- 数据可视化|数据可视化-监控大屏呈现和拓扑图绘制工具总结
- #|1 一文详细阐述UI设计颜色搭配,受益匪浅~
- QT|QT-数据可视化大屏1
- 大屏云|数据可视化大屏 - 大屏云极简使用手册