绘图基础–图形的选择
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)