小提琴图

2018-09-03

2018-09-03
小提琴图

1 数据集准备


  小提琴图是箱线图和核密度图的结合,因为形似小提琴而得名。小提琴图是用来比较多组数据分布的方法。

  该数据为陕西省西安市雁塔区2018年6月25日中午11时到6月26日11时的温度变化数据,时间段处于阴雨天气,因此温度波动性较为明显。

library(readxl) # 读取xlsx格式数据的加载包
data=read_excel("D:/TASK/温度.xlsx")
str(data) #查看数据结构信息
## Classes 'tbl_df', 'tbl' and 'data.frame':    25 obs. of  2 variables:
##  $ Time       : num  11 12 13 14 15 16 17 18 19 20 ...
##  $ Temperature: num  31 26 26 27 28 28 29 31 31 29 ...

  通过读取陕西省西安市雁塔区6月25日中午11时到6月26日11时的温度变化数据,得知该数据有两个变量,分别为时间和温度,且温度大多在24~31度之间波动。

2 绘制简单小提琴图


  绘制小提琴图需要用到vioplot函数,其基本书写格式为:

  vioplot(数据$数值型向量名)

  由于vioplot函数不支持设置图形标题等参数,因此必须利用title函数单独设置,基本书写格式为:

  title(main=“主题”,ylab=“纵坐标”,xlab=“横坐标”)

  例如,下图是对陕西省西安市雁塔区6月25日温度绘制的小提琴图:

library(vioplot)
vioplot(data$Temperature)
title(main="陕西省西安市雁塔区温度观测",ylab="温度",xlab="全部观测")

  从上图看出,从全部观测样本来看,其中空心圆表示中位数,小提琴图中间叠加了一个较窄的黑色箱线图,外围的曲线为核密度估计曲线。

3 ggplot绘制小提琴图


jsdata=read_excel("D:/TASK/净水器建模(1月19日)副本1.xlsx") 
str(jsdata)
## Classes 'tbl_df', 'tbl' and 'data.frame':    1011 obs. of  20 variables:
##  $ 标题      : chr  "惠安特水龙头净水器家用厨房直饮净水机双出水智能纯水机ro反渗透" "爱华普净水器家用直饮加热一体机RO反渗透纯水机厨房自来水过滤器" "【新品上市】史密斯佳尼特550G无桶大流量净水器CDR550-A1" "碧云泉净水器家用直饮加热一体机自来水过滤器反渗透净水机器R506" ...
##  $ 原价      : num  1664 6990 4998 4999 2099 ...
##  $ 促销价    : num  499 1298 1099 558 1188 ...
##  $ 销量      : num  845 550 121 103 850 ...
##  $ 评价      : num  2849 3049 129 378 2054 ...
##  $ 天猫积分  : num  49 129 369 469 86 49 89 86 269 109 ...
##  $ 描述评分  : num  4.8 4.9 4.9 4.9 4.9 4.9 4.8 4.9 4.9 4.9 ...
##  $ 服务评分  : num  4.8 4.8 4.9 4.9 4.9 4.8 4.8 4.9 4.9 4.9 ...
##  $ 物流评分  : num  4.9 4.8 4.9 4.9 4.8 4.9 4.8 4.9 4.8 4.9 ...
##  $ 人气      : num  6590 12879 456 15450 11537 ...
##  $ 保修期    : chr  "1年" "1年" "1年" "2年" ...
##  $ 店铺分类  : chr  "官方旗舰店" "官方旗舰店" "官方旗舰店" "官方旗舰店" ...
##  $ 智能类型  : chr  "其他" "其他" "不支持智能" "其他" ...
##  $ 颜色      : chr  "白色" "黑色" "白色" "黑色" ...
##  $ 使用位置  : chr  "终端净水" "终端净水" "终端净水" "终端净水" ...
##  $ 功效      : chr  "直饮" "直饮" "直饮" "直饮" ...
##  $ 净水器品牌: chr  "Huianter/惠安特" "爱华普" "CHANITEX/佳尼特" "碧云泉" ...
##  $ 分类      : chr  "纯水机" "净水机;纯水机" "净水机;纯水机;反渗透纯水机" "净水机;纯水机;台面净水器;反渗透纯水机" ...
##  $ 工作原理  : chr  "反渗透" "反渗透" "反渗透" "反渗透" ...
##  $ 滤芯      : chr  "活性炭;RO膜" "活性炭;活性炭;超滤;PPF棉;RO膜" "活性炭;RO膜" "活性炭;RO膜;PP棉,活性炭纤维" ...
library(ggplot2)
jsdata$销量=log(jsdata$销量+1)  #因变量数值作对数处理
p<-ggplot(jsdata,aes(x=保修期,y=销量))
p+geom_violin()

  上面的图形是绘制的普通的小提琴图,进行可视化时图中曲线会互相干扰,各组数据的规律不明显,为此需要进一步分析。如下:

p+geom_violin()+
geom_boxplot(width=.1,fill="lightgreen",outlier.colour=NA)+
stat_summary(fun.y=median,geom="point",fill="white",shape=21,size=2.5)

  从上图看,用violin和boxplot绘制出的小提琴图,得出净水器数据的销量的趋势,且净水器保修期为离散变量,可以看出,5年的净水器保修期的销量最高,无保修期的净水器销量最低。推测保修期时间影响销量。

4 本章汇总


参数 类别 功能
readxl 读取EXCEL数据包
vioplot 绘制小提琴包
title 参数 设置图形标题
ggplot 图形的绘制
geom_violin 函数 绘制小提琴图
geom_boxplot 函数 绘制箱线图
fill 参数 图形填充色