数据可视化——R语言ggplot2包绘制箱线图叠加散点图

数据可视化——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 = 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()

示例结果如下:

在这里插入图片描述

箱线图叠加散点图

需要注意的是:图层叠加的先后顺序会影响绘制的结果,本示例中从底层开始的图层顺序依次为:误差条图,箱线图,散点图,误差条图处于最底层,会被填充为白色的箱线图覆盖其中间部分,散点图处于最上方,也会覆盖箱线图的内容。

另外:

  • 散点图需要使用抖动的方式绘制,以避免重叠,示例中横轴为分组变量,纵轴为实际关心的值,设置抖动时需避免纵轴的值被改变,所以geom_jitter函数中仅需设置width,不设置height。
  • 如果数据中存在异常点时,箱线图也会绘制出异常点,而散点图又会绘制所有的点,使得每个异常点被绘制了两次,可以通过在绘制箱线图时将异常点的颜色设定为与背景色相同即可(使其在箱线图中不可见)。
可以使用Plotly库来绘制具有双坐标轴的图形。下面是一个示例代码,展示了如何使用Plotly绘制双坐标轴图: ```python import plotly.graph_objects as go # 创建数据 x = [1, 2, 3, 4, 5] y1 = [10, 15, 7, 12, 9] y2 = [50, 30, 40, 20, 25] # 创建第一个坐标轴 fig = go.Figure() fig.add_trace(go.Scatter(x=x, y=y1, name='y1', line=dict(color='blue'))) # 创建第二个坐标轴 fig.add_trace(go.Scatter(x=x, y=y2, name='y2', line=dict(color='red'), yaxis='y2')) # 设置图形布局 fig.update_layout( yaxis=dict(title='y1', titlefont=dict(color='blue'), tickfont=dict(color='blue')), yaxis2=dict(title='y2', titlefont=dict(color='red'), tickfont=dict(color='red'), overlaying='y', side='right'), xaxis=dict(title='x') ) # 显示图形 fig.show() ``` 在上面的示例代码中,首先创建了x、y1和y2的数据。然后使用`go.Figure()`创建一个新的图形对象,使用`add_trace()`方法分别添两个散点图,分别对应y1和y2的数据。在添第二个散点图时,通过`yaxis='y2'`参数指定其使用第二个坐标轴。 接下来,使用`update_layout()`方法设置图形的布局。通过`yaxis`参数设置第一个坐标轴的标题和颜色,通过`yaxis2`参数设置第二个坐标轴的标题、颜色、叠加在第一个坐标轴上、并位于右侧。通过`xaxis`参数设置x轴的标题。 最后,使用`fig.show()`显示图形。 运行上述代码,将会得到一个带有双坐标轴的图形,其中y1使用蓝色线条表示,y2使用红色线条表示。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值