R-绘图-ggplot2-第三章&第四章学习笔记

########## 第三章 ##########
qplot(displ, hwy, data=mpg, colour=factor(cyl), facets=.~year) + geom_smooth()

p <- qplot(displ, hwy, data=mpg, colour=factor(cyl))       
# 将图形呈现在屏幕上
print(p)
# 查看图形的结构
summary(p)
# 把图形的缓存副本保存到磁盘上
save(p, file="plot.rdata")
# 将图形保存在磁盘上
ggsave("plot.png", width=5, height=5)
# 重现已保存的图形
load("plot.rdata")

                   

 

########## 第四章 ##########
# 在加上图层之前,该图形无法显示
p <- ggplot(diamonds, aes(carat))  #图形对象

p1 <- p + layer(
  geom="bar", 
  geom_params=list(fill="steelblue"),
  stat="bin",
  stat_params=list(binwidth=2),
  position = "identity"
  )
p1
# 可以用快捷函数来添加图层。快捷函数通常是geom_或stat_开头。p1等价于p2。
p2 <- p + geom_histogram(binwidth = 2,fill="steelblue")

ggplot(msleep, aes(sleep_rem/sleep_total, awake)) + geom_point() 
#上面等价于下面,都是 图形对象+图层
qplot(sleep_rem/sleep_total, awake, data=msleep)

# 可以给qplot生成的图形对象加图层,以下三种写法等价
qplot(sleep_rem/sleep_total, awake, data=msleep) + geom_smooth() #给qplot添加图层
qplot(sleep_rem/sleep_total, awake, data=msleep, geom=c("point", "smooth"))
ggplot(msleep, aes(sleep_rem/sleep_total, awake)) + geom_point() + geom_smooth() #这三个都等价

p <- ggplot(msleep, aes(sleep_rem/sleep_total, awake)) 
#summary函数首先给出图形对象的默认设置,然后给出每个图层的信息
summary(p)  
p <- p + geom_point()  #加上图层
summary(p)  #展示每个图层的信息

          

### 将图层储存起来,方便复用
library(scales)
# 创建了一个带有半透明深蓝色回归线的图层
bestfit <- geom_smooth(method="lm", se=F, colour=alpha("steelblue", 0.5), size=2)  
# 复用已创建的图层
qplot(sleep_rem, sleep_total, data=msleep) + bestfit  
qplot(awake, brainwt, data=msleep, log="y") + bestfit
qplot(bodywt, brainwt, data=msleep, log="xy") + bestfit

     

# 使用 %+% 给图形对象添加新的数据集以代替原来的数据集
p <- ggplot(mtcars, aes(mpg, wt, colour=cyl)) + geom_point()
p
mtcars <- transform(mtcars, mpg=mpg^2)  # !!!
p %+% mtcars  

              

p <- ggplot(mtcars, aes(x=mpg, y=wt))
# 用默认的参数映射来添加图层
p + geom_point()
# 默认映射可以在新图层里扩充和修改
p + geom_point(aes(colour=factor(cyl))) 
p + geom_point(aes(y=disp))

              

# 设定和映射的区别
p <- ggplot(mtcars, aes(mpg, wt))
p + geom_point(colour="darkblue")  # 设定改的是图形属性
p + geom_point(aes(colour="darkblue"))  #映射创建了只有一个值的离散型变量
qplot(mpg, wt, data=mtcars, colour="darkblue") #映射
qplot(mpg, wt, data=mtcars, colour=I("darkblue"))  # 在qplot中将某个值放到I()中来实现设定

                 

# 分组
library(nlme)
# 用分组参数作“细面图”
p <- ggplot(Oxboys, aes(age, height, group=Subject)) + geom_line()
# 因没有正确分组而毫无用处
ggplot(Oxboys, aes(age, height)) + geom_line()  

                     

#在添加的图层上可以进行不同的分组
p + geom_smooth(aes(group=Subject), method="lm", se=F) #给每个人添加一条拟合直线
p + geom_smooth(method="lm", se=F)       #默认分组方式,给每个人添加一条拟合直线
p + geom_smooth(aes(group=1), method="lm", se=F)       #给所有人添加一条拟合直线

       

# 修改默认分组
boysbox <- ggplot(Oxboys, aes(Occasion, height)) + geom_boxplot()
# Occasion是一个离散型变量,因此不需设定group属性,自动将其设定为默认分组变量
boysbox
# 叠加的图层想要按照个体分组,则需要修改第一图层的默认分组变量
boysbox + geom_line(aes(group=Subject), colour="#3366FF")

                  

# 用线性插值法来实现渐变的线条图
xgrid <- with(df, seq(min(x), max(x), length=50))
interp <- data.frame(
  x = xgrid,
  y = approx(df$x, df$y, xout=xgrid)$y,
  colour = approx(df$x, df$colour, xout=xgrid)$y
)
qplot(x, y, data=df, colour=colour, size=I(5)) + geom_line(data=interp, size=2)

# 统计变换可以在原数据集的基础上生成新的变量。生成的变量需要用..括起来。生成的新变量可以被直接调用
ggplot(diamonds, aes(carat)) + geom_histogram(aes(y=..density..), binwidth=0.1)  
qplot(carat, ..density.., data=diamonds, geom="histogram", binwidth=0.1)

# 将几何对象和统计变换相结合
d <- ggplot(diamonds, aes(carat)) + xlim(0, 3)
d + stat_bin(aes(ymax= ..count..), binwidth=0.1, geom="area")
d + stat_bin(
  aes(size=..density..), binwidth=0.1, geom="point",position="identity"
)
d + stat_bin(
  aes(y=1,fill=..count..),binwidth=0.1, geom="tile", position="identity"
)  # ?代码有问题,怎么画瓦片图?

         

# 综合运用
require(nlme, quiet=TURE, warn.conflicts=FALSE)
model <- lme(height~age, data=Oxboys, random = ~1+age|Subject)
oplot <- ggplot(Oxboys, aes(age, height, group=Subject)) + geom_line()
# 对比模型拟合效果的两种方式之方式一:
# 将预测值和真实值画在同一个图里,观察深层拟合的情况
age_grid <- seq(-1, 1, length=10)
subjects <- unique(Oxboys$Subject)
preds <- expand.grid(age=age_grid, Subject=subjects)
preds$height <- predict(model, preds)
# 由于新的预测值的数据集中,变量名和默认数据集中一样,因此可以省略
oplot + geom_line(data=preds, colour="#3366FF", seize=0.4)

# 对比模型拟合效果的两种方式之方式二:
# 绘制残差
Oxboys$fitted <- predict(model)
Oxboys$resid <- with(Oxboys, fitted-height)
# 更改数据集为Oxboys,并添加基于整体的平滑曲线
oplot %+% Oxboys + aes(y=resid) + geom_smooth(aes(group=1))
# 残差不是随机分布,因此在模型中添加二次项,重新拟合模型
model2 <- update(model, height~age+I(age^2))
Oxboys$fitted2 <- predict(model2)
Oxboys$resid2 <- with(Oxboys, fitted2-height)
oplot %+% Oxboys +aes(y=resid2) + geom_smooth(aes(group=1))

   


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值