读书笔记_第十一章

#中级绘图

#散点图
#用于描述两个连续型变量间(x,y)的关系

#范例一
attach(mtcars)
plot(wt,mpg,
     main="Basic Scatter plot of MPG vs. Weight",
     xlab="Car Weight (lbs/1000)",
     ylab="Miles Per Gallon ",
     pch=19) #画散点图,wt对应横坐标,mpg对应纵坐标
abline(lm(mpg~wt),col="red",lwd=2,lty=1) #加回归线
#lowess() 平滑拟合曲线
#loess()是基于lowess的更新和更强大的拟合函数
#用来添加一条平滑曲线,基于局部加权多项式回归的非参数方法
lines(lowess(wt,mpg),col="blue",lwd=2,lty=2)
detach(mtcars)

#比较abine,lines
#都能用于在原图上添加直线或者折线
#line(x,y),基本功能相当于plot(x,y,type="1"),plot()函数被调用即可创建新图
#而line函数是在已存在的图形上添加信息,并不能自己生成图形

#abline(a,b),表示一条y=ax+b的直线
#abline(h=y),水平画一条线垂直于纵轴
#abline(v=x),垂直画一条线于x轴
#abline(lm.obj),传入线性模型对象,画线性方程

#范例二
library(carData)
library(car)

#模型中的分组变量,必须从"numeric"类型首先转换成Factor类型,
#否则会提示Error in if (counts[i] == 0) next : argument is of length zero

x <- mtcars[,c("mpg","wt","cyl")]
x$cyl <- as.factor(x$cyl) #强制转换,从numeric到Factor类型
class(x$cyl)

#mpg~wt|cyl,表示按照cyl水平(4,6,8)分别绘制mpg和wt的关系图
#span,控制loess平滑曲线的平滑量,参数值越大,拟合的越好
#boxplots='xy',对应wt,mpg的边界箱线图
#legend.plot,表明在左上界添加图例
with(x,
      scatterplot(mpg~wt|cyl, data=x,lwd=2,span=0.9,
            main='Scatter Plot of MPG vs Weight by # Cylinders',
            xlab='Weight of Car (lbs/1000)',
            ylab='Miles Per Gallon',
            legend.plot=TRUE,
            id.method="identify", #这个选项看不出效果
            boxplots='xy')
)#labels=row.names(x),加进去就报错

#散点图矩阵

#范例一
#~右边表示所有变量
#关于主对角线对称的图形,相同
#指定变量间的二元关系
pairs(~mpg+disp+drat+wt,data=mtcars,main="Basic Scatter Plot Matrix")

pairs(~mpg+disp+drat+wt,data=mtcars,
      main="Basic Scatter Plot Matrix",
      upper.panel=NULL) #仅显示下三角六副图

pairs(~mpg+disp+drat+wt,data=mtcars,
      main="Basic Scatter Plot Matrix",
      lower.panel=NULL) #仅显示上角六副图

#范例二
library(car)
#~右边表示所有变量
#非对角线上的每副图默认添加线性和平滑(loess)拟合曲线
#对角线上的每副图增加核密度图,下方增加轴须图
#smooth 
#spread=FALSE,表示不添加分散度和对称信息的直线,
#仅一条虚线,表示平滑曲线
#三条虚线,其中两条表示分散度和对称信息

scatterplotMatrix(~mpg+disp+drat+wt,data=mtcars,
                  smooth=list(spread=FALSE),
                  main="Scatter Plot Matrix via car Package"
                  )

#高密度散点图

#范例一

#数据点重叠严重时,用散点图来观察变量关系就会显得“力不从心”
set.seed(1234) #设定随机种子,方便重现运算结果
n <- 10000
c1 <- matrix(rnorm(n,mean=0,sd=0.5),ncol=2)
c2 <- matrix(rnorm(n,mean=3,sd=2),ncol=2)
mydata <- rbind(c1,c2)
mydata <- as.data.frame(mydata)
names(mydata) <- c("x","y")
with(mydata,
     plot(x,y,pch=19,main="Scatter Plot with 10,000 Observatiions")
)#随机数画图


#范例二
#用核密度估计生成颜色密度来表示点分布的散点图
#颜色深的部分,表示数据集中,量比较多

with(mydata,
     smoothScatter(x,y,main="Scatter Plot Colored by Smoothed Densities")
)

#范例三
#将二元变量的封箱放到六边形单元格中
#比颜色更直观些
#xbins 划分xbnd范围的箱子数
library(hexbin)
with(mydata,{
     bin <- hexbin(x,y,xbins=50)
     plot(bin,main="Hexagonal Binning with 10,000 Observations")
            }#包含两条语句,用大括号
)

bin <- hexbin(mydata$x,mydata$y,xbins=50)
class(bin)  #返回package,此对象可以直接被plot画图

#三维散点图
#散点图和散点图矩阵展示的都是二元变量关系
#对三个定量变量的交互关系进行可视化,必须使用三维散点图

#范例一
#wt,   被绘制在x轴上
#disp, 被绘制在y轴上
#x,y轴,位于底面
#mpg,  被绘制在透视轴上

library(scatterplot3d)
attach(mtcars)
scatterplot3d(wt,disp,mpg,main="Baisc 3D Scatter Plot")
detach(mtcart)

#范例二
#wt,   被绘制在x轴上
#disp, 被绘制在y轴上
#x,y轴,位于底面
#mpg,  被绘制在透视轴上

#highlight.3d=TRUE
#points will be drawn in different colors related to y coordinates
#(only if type = "p" or type = "h", else color will be used).

#type
#character indicating the type of plot: "p" for points, 
#"l" for lines, "h" for vertical lines to x-y-plane, etc.

library(scatterplot3d)
attach(mtcars)
scatterplot3d(wt,disp,mpg,
              pch=16, #设置图形符号
              highlight.3d=TRUE, #设置颜色
              type="h",#将点与地面垂直连线
              main="Baisc 3D Scatter Plot")
detach(mtcart)


#范例三
#wt,   被绘制在x轴上
#disp, 被绘制在y轴上
#x,y轴,位于底面
#mpg,  被绘制在透视轴上

#highlight.3d=TRUE
#points will be drawn in different colors related to y coordinates
#(only if type = "p" or type = "h", else color will be used).

#type
#character indicating the type of plot: "p" for points, 
#"l" for lines, "h" for vertical lines to x-y-plane, etc.

library(scatterplot3d)
attach(mtcars)
s3d <- scatterplot3d(wt,disp,mpg,
              pch=16, #设置图形符号
              highlight.3d=TRUE, #设置颜色
              type="h",#将点与地面垂直连线
              main="Baisc 3D Scatter Plot")
class(s3d) #返回list

#追加回归面
#z对应y因变量
#x,y对应预测变量
fit <- lm(mpg~wt+disp) #生成线性模型

#平面代表预测值
#图中的点代表实际值
#平面到点的垂直距离表示残差
#若点在平面之上表明它的预测值被低估了
#若点在平面之下表明它的预测值被高估了
s3d$plane3d(fit)
detach(mtcart)

#旋转的三维散点图

#范例一

install.packages("rgl")
library(rgl)
attach(mtcars)

#wt,对应x
#disp,对应y
#mpg,对应透视轴
#立方体的形式,拖拽立方体,可以使其任意旋转
plot3d(wt,disp,mpg,col="red",size=5)

#范例二
#支持旋转
#切面的形式
#包含各种回归曲面,比如线性,二次,平滑,附加等类型;
#默认添加线性平面
library(car)
with(mtcars,
     scatter3d(wt,disp,mpg)
     )


#气泡图
#一般来说,统计人员倾向于避免使用气泡图,原因和避免使用饼图一样
#相对于长度的判断,人们对于体积、面积的判断统称更困难
#但气泡图在商业应用中非常受欢迎;

#三维散点图可以来展示三个定量变量间的关系,现在介绍另外一种思路
#先创建一个二维散点图,然后用点的大小来代表第三个变量的值

#范例一
attach(mtcars)
r <- sqrt(disp/pi) #pi=3.1415926

#x,y坐标上画图(圆圈,方形图,星形图,温度计图,箱线图)
#circle,对应第三个变量,表示圆圈半径
#inches,比例因子,控制着圆圈大小
symbols(wt,mpg,circle=r,inches=0.30,
        fg="white",bg="lightblue",
        main="Bubble Plot with point size proportional to displacement",
        ylab="Miles Per Gallon",
        xlab="Weight of Car (lbs/1000)")
text(wt,mpg,rownames(mtcars),cex=0.6) #在指定坐标位置,进行文本标注
detach(mtcars)
    

#折线图
#如果将散点图的点从左往右连接起来,就会得到一个折现图
#折现图是刻画变动的优秀工具

#范例一
opar <- par(no.readonly = TRUE)
par(mfrow=c(1,2))
t1 <- subset(Orange,Tree==1)# 根据条件过滤,选出满足条件的包含全部列的子集
plot(t1$age,t1$circumference,
     xlab="Age (days)",
     ylab="Circumference (mm)",
     main="Orange Tree 1 Growth")
plot(t1$age,t1$circumference,
     xlab="Age (days)",
     ylab="Circumference (mm)",
     main="Orange Tree 1 Growth",
     type="b") #type="b",点线图
par(opar)

#折线图
#方法一:plot(x,y,type=)
#type="p",生成典型的散点图,只有点
#type="l",生成典型的散点图,只有线

#type="o",生成常见的散点图,包含线直接串联所有点

#type="b",生成常见的散点图,包含点(可显示),线,线在点处中断
#type="c",生成典型的散点图, 包含点(空白),线,线在点空白处中断

#type="s",生成典型的散点图,阶梯线,先横着划线,然后竖着画线
#type="S",生成典型的散点图,阶梯线,先竖着画线,然后横着划线

#type="h",生成典型的散点图,直方图式的散点图

#type="n",不生成任何点和线,通常用来为后面的命令创建坐标轴

#方法二:lines(x,y,type=)

#结论:
#plot()函数是在被调用时创建一幅新图
#lines()函数是在已存在的图形上添加信息,并不能自己生成图形

#范例
class(Orange$Tree) #反馈"ordered" "factor" 

Orange$Tree <- as.numeric(Orange$Tree) #将原始因子变量强制转换成数值型
ntrees <- max(Orange$Tree) #返回当前列中最大值
xrange <- range(Orange$age) #返回当前列中min,max
yrange <- range(Orange$circumference)#返回当前列中min,max
plot(xrange,yrange,type="n",
     xlab="Age (days)",
     ylab="Circumference (mm)"
)#画空图,仅包含纵横坐标的刻度线,以及纵横坐标的标题
colors <- rainbow(ntrees) #基于树的种类,生成对应彩虹型的颜色向量
linetype <- c(1:ntrees) #基于树的种类,生成对应线条类型的类型向量
plotchar <- seq(18,18+ntrees,1) #基于树的种类,生成对应图标类型的符号向量

for(i in 1:ntrees){
    tree <- subset(Orange,Tree==i)
    lines(tree$age,tree$circumference,
         type="b",
         lwd=2,
         lty=linetype[i],
         col=colors[i],
         pch=plotchar[i]
         )
}#为每一个树的age,circumference(周长),增加折线图,对应编号的颜色向量,类型向量,符号向量

title("Tree Growth","example of line plot")
legend(xrange[1],yrange[2],
       1:ntrees,cex=0.8,
       col=colors,pch=plotchar,
       lty=linetype,title="Tree"
)
#在位置x最小值,y最大值处,添加图例
#1,colors[1],plotchar[1],linetype[1],对应Tree=1的树

#相关图

#范例一
options(digits=2) #针对全局设置保留小数点后两位数
cor(mtcars) #得到相关系数矩阵

library(corrgram)
#corrgram(x,order=,panel=,text.panel=,diag.panel=)
#x是一行一个观测的数据框,宽表格
#order=TRUE,相关矩阵将使用主成分分析法来对变量重排序,使得二元变量的关系模式更为明显

#上三角,下三角数据相同,且基于对角线对称
#lower.panle 设置下三角图形类型
#upper.panle 设置上三角图形类型

#控制非主对角参数设置 lower.panel,upper.panel
#panel.pie        用饼图的填充比来来表示相关性大小
#panel.shade      用阴影的深度来表示相关性大小
#panel.ellipse    画一个置信椭圆和平滑曲线
#panel.pts        画一个散点图
#panel.conf       画一个相关性及置信区间
#NULL             表示为空,留白


#控制主对角参数设置text.panel,diag.panel
#panel.txt        输出变量名
#panel.minmax     输出变量的最大值最小值和变量名
#panel.density    输出核密度曲线和变量名

corrgram(mtcars,order=TRUE,lower.panel=panel.shade,
         upper.panel=panel.pie,text.panel=panel.txt,
         main="Corrgram of mtcars intercorrelations")

#读图
#左下角的单元格,在主对角线下方的单元格
#蓝色的和从左下指向右上的斜杠表示单元格中的两个变量呈正相关,斜率为正
#红色的和从右上斜下的斜杠表示单元格的两个变量呈负相关,斜率为负
#色彩越深,饱和度越高,说明变量相关性越大
#相关性接近于0的单元格基本无色

#三上角的饼图也展示了相同的信息
#相关性大小由被填充的饼图块的大小来展示
#正相关性从12点钟开始顺时针填充饼图
#负相关性从12点钟开始逆时针填充饼图

#范例二
library(corrgram)
corrgram(mtcars,order=TRUE,lower.panel = panel.ellipse,
         upper.panel = panel.pts,
         text.panel = panel.txt,
         diag.panel = panel.minmax,
         main="Corrgram of mtcars data using scatter plots and ellipses")


#范例三
library(corrgram)

#上三角区域留白
#变量按照初始顺序排列

corrgram(mtcars,lower.panel=panel.shade,
         upper.panel=NULL,
         text.panel=panel.txt,
         main="Car Mileage Data (unsorted)")


#自定义调色板
n <- 1000
mycolors <- colorRampPalette(c("blue", "orangeRed"))(n) #自定义一个颜色系列
barplot(rep(1,times=n),col=mycolors,border=mycolors,axes=FALSE)
box()

#范例四
library(corrgram)

#自定义调色板
colors()  #返回所有R中预定义的颜色变量
cols <- colorRampPalette(c("darkgoldenrod4","burlywood1","darkkhaki","darkgreen"))

#传入颜色系列
corrgram(mtcars,order=TRUE,col.regions=cols,
         lower.panel=panel.shade,
         upper.panel=panel.conf,
         text.panel=panel.txt,
         main="A Corrgram (or Horse) of a Different Color")

#马赛克图 mosaic plot
#嵌套矩形面积正比于单元格频率,其中该频率即多维列联表中的频率
#颜色或阴影可表示拟合模型的残差值
#两个以上类别型变量

#范例一
td <- ftable(Titanic)
class(td) #返回"ftable"
td <- as.data.frame(td) #将ftable类型强制转换成data.frame类型

t1 <-aggregate(td$Freq,by=list(td$Sex),FUN=sum) #prop.table(t1)会报错
t2 <-with(td,table(Sex))
prop.table(t2)

library(grid)
library(vcd)
mosaic(Titanic,shade=TRUE,legend=TRUE)

#排列顺序
#class      左
#sex        上
#age        右
#survived   下

#shade=TRUE,将根据拟合模型的皮尔逊残差值对图形上色
#legned=TRUE,展示残差的图例
mosaic(~Class+Sex+Age+Survived,data=Titanic,shade=TRUE,legend=TRUE)

#马赛克读图
#用切豆腐块的方式解读

#假设生存率与船舱等级,性别和年龄无关的条件下
#蓝色阴影表示,该类别的生存率通常超过预期值,存活率高
#红色阴影表示,该类别的生存率通常低于预期值,存活率低


#1:从船员到头等舱,存活率陡然提高
#2:大部分孩子都处于三等舱和二等舱中
#3:在头等舱中的大部分女性都存活下来,而三等舱中仅有一半女性存活
#4:船员中女性很少,导致该组的Survived标签重叠

#1.在这次事件中,当灾难发生的时候,人们倾向于保护妇女和儿童,所以我们可以看到,妇女存活着的比例要远远高于男性。
#2.是不是富有的人在灾难发生的时候有优先权呢?根据我们构建的图标,答案是的。
#不管是男性还是女性,头等舱中的存活率要高于次等舱和低等舱
#3.船员是不是都在关键的时刻会保护你呢?这个结论可能有待商榷,但是我从我们上面构建的图标可以看到。
#在四中身份(头等,次等,低等,船员)中船员的存活了是排在第二位的。(我们可以理解有些船员,带着有钱人跑了。)
#4.当然还有跟多的理解,如果读者看过泰坦尼克号的话,在读这幅图的时候应该会觉的很有意思。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值