绘图基础–图形的选择

2018-09-03

2018-09-03
R语言图形的选择

  除特殊图形绘制需求外,R的图形绘制一般围绕统计图形为主,需要考虑数据的类型。

1 变量个数绘制图形


  变量个数绘制图形,即绘制图形时需要考虑变量的个数多少,选择合适的图形进行绘制。

1.1 单一变量绘图

  单变量绘图,即当绘制图形的变量(字段)只有一个时,进行绘制。常见的单变量绘制图形有:折线图、散点图、直方图、饼图。

str(mtcars)
## 'data.frame':    32 obs. of  11 variables:
##  $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
##  $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
##  $ disp: num  160 160 108 258 360 ...
##  $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
##  $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
##  $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
##  $ qsec: num  16.5 17 18.6 19.4 17 ...
##  $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
##  $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
##  $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
##  $ carb: num  4 4 1 1 2 1 4 2 2 4 ...
x=mtcars$mpg
y=mtcars$cyl
z=mtcars$hp
plot(x,col="red")

1.2 双变量绘图

  双变量绘制图形,即绘制图形需要用到两个变量(字段)进行图形绘制。常见有:散点图、箱线图、马赛克图等。

par=c(1,3)
plot(x,y,type="l",col="green")  #选择折线图

plot(x,y,type="o",col="orange") #选择点线图

plot(x,y,type="h",col="red")    #垂线图

1.3 多变量绘图

两两绘制相关散点图形

str(mtcars)#确保数据框形式
## 'data.frame':    32 obs. of  11 variables:
##  $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
##  $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
##  $ disp: num  160 160 108 258 360 ...
##  $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
##  $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
##  $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
##  $ qsec: num  16.5 17 18.6 19.4 17 ...
##  $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
##  $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
##  $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
##  $ carb: num  4 4 1 1 2 1 4 2 2 4 ...
par=c(2,1) #图形显示为2行1列
r=data.frame(x,y,z)#将两两之间形成数据框形式
plot(r,col="red")#绘制图形

除了用plot对多变量绘图外,也可进行简单的corrgram绘制,如下所示:

library("corrgram") #调用加载包,原包为corrgram
corrgram(mtcars)#绘制图形

2 变量类型绘制图形


  R语言中的变量(字段)分为连续性变量和离散型变量两类。绘图中,会以变量的属性选择合适图形进行绘制。具体如下:

2.1 连续型变量绘制

  连续型变量,即变量中的数值是连续性的,不存在分离的情况,常见为数值型。考虑连续性变量绘制图形的有散点图、折线图、直方图等。例如:

  1)散点图

library(gcookbook) #调取系统数据集包
str(heightweight)  #查看数据情况
## 'data.frame':    236 obs. of  5 variables:
##  $ sex     : Factor w/ 2 levels "f","m": 1 1 1 1 1 1 1 1 1 1 ...
##  $ ageYear : num  11.9 12.9 12.8 13.4 15.9 ...
##  $ ageMonth: int  143 155 153 161 191 171 185 142 160 140 ...
##  $ heightIn: num  56.3 62.3 63.3 59 62.5 62.5 59 56.5 62 53.8 ...
##  $ weightLb: num  85 105 108 92 112 ...
plot(heightweight$ageYear,heightweight$heightIn,pch=20,main="学龄儿童的年龄与身高散点图",xlab="年龄",ylab="身高",col="red") #绘制散点图

  2)直方图

library(readxl)  
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棉,活性炭纤维" ...
jsdata$销量=log(jsdata$销量+1)  #因变量数值作对数处理
hist(jsdata$销量,xlab="销量",ylab="频数",col="lightgreen",main="")#绘制直方图

  3)折线图

str(pressure)
## 'data.frame':    19 obs. of  2 variables:
##  $ temperature: num  0 20 40 60 80 100 120 140 160 180 ...
##  $ pressure   : num  0.0002 0.0012 0.006 0.03 0.09 0.27 0.75 1.85 4.2 8.8 ...
plot(pressure$temperature,pressure$pressure,type="l") # type="l"表示线性line

2.2 离散型变量绘制

  离散型变量,即变量中的数值是分段的,常见为因子型、逻辑型。考虑绘制图形的有柱状图、饼图等。例如:

  饼图绘制如下:

library(readxl)
data=read_excel("D:/TASK/净水器建模(1月19日)副本1.xlsx")
freq = table(data$保修期) #查看保修期的频数
freq
## 
##    1年    2年    3年    5年 无保修 
##    592     67    162     22    168
piepercent<- paste(round(100*freq/sum(freq), 2), "%") # 将数据四舍五入保存为两位小数
pie1=pie(freq,labels = piepercent,main="净水器保修期分布百分比占比图",col = rainbow(length(freq)))#添加百分比
legend("topright",c("1年","2年","3年","5年","无保修"),cex=0.6,#添加图例
fill=rainbow(length(freq))) #调色板

2.3 连续与离散型变量绘制

箱线图,例如:

boxplot(销量~保修期,data=jsdata,col="lightblue")

2.4 离散型与离散型变量绘制

绘制马赛克图形(棘状图)等,例如:

library(vcd) # 使用vcd里的mosaic函数
data("HairEyeColor") # 加载内部自带数据集中头发眼睛颜色数据
str(HairEyeColor) # 查看数据结构
##  table [1:4, 1:4, 1:2] 32 53 10 3 11 50 10 30 10 25 ...
##  - attr(*, "dimnames")=List of 3
##   ..$ Hair: chr [1:4] "Black" "Brown" "Red" "Blond"
##   ..$ Eye : chr [1:4] "Brown" "Blue" "Hazel" "Green"
##   ..$ Sex : chr [1:2] "Male" "Female"
mosaic(HairEyeColor, shade = TRUE) #绘制马赛克图形

3 维度绘制图形


维度常见为一维、二维、三维。由特性需求不同,选择图形。

3.1 平面维度图形

变量属于二维,平面展示即可,如地图、折线图等。例如:

library(maps) #为了使用地图数据
library(mapdata) #加载地图
library(ggplot2)
world_map<-map_data("world") #加载数据集
ggplot(world_map,aes(x=long,y=lat,group=group))+
geom_polygon(fill="lightblue",colour="black")

3.2 三维度图形

气泡图、等高线图等。例如:

data(volcano) #加载火山数据集
grey_gamma <- 2.2
grys <- grey.colors(8, 0.55, 0.95, grey_gamma)
layout(matrix(c(1,2,1,3,1,4),3,2,byrow=TRUE), c(3,1))
image(volcano, axes=F, col=terrain.colors(100),, asp=1, main="a")
contour(volcano, add=T)