热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ggplot2学习笔记--第四章

首先熟悉下一些基本知识:几何对象geom:它执行者图层的实际渲染,控制着生成的图像类型。例如,用点几何对象将会生成散点图,而用线几何对象生成折线图每个几何对象都有一组它识别的图形属性和一组绘图所需

首先熟悉下一些基本知识:

几何对象geom : 它执行者图层的实际渲染,控制着生成的图像类型。例如,用点几何对象将会生成散点图,而用线几何对象生成折线图

每个几何对象都有一组它识别的图形属性和一组绘图所需的值


每个几何对象都有一个默认的统计变换


统计变换 stat:即对数据进行统计变换,它通常以某种方式对数据信息进行汇总。例如,平滑是一个很有用的统计变换,它能在一些限制条件的约束下计算给定的

x值和y值,


位置调整:即对该层中元素为止进行微调。以下是常用的参数

                         dodge: 避免重叠,并排放置

                         fill : 堆叠图形元素并将高度标准化为1

                          identity: 不做任何调整

                          jitter: 给点添加扰动的避免重合

                         stack:将图形元素堆叠起来


下面附上代码

library(ggplot2)
## 通过ggplot创建图形对象
p <- ggplot(diamonds, aes(carat, price, colour = cut))


## 添加“点”几何对象
p <- p + layer(geom = "point")




## 例:手动创建图形对象并添加图层
p <- ggplot(diamonds, aes(x = carat))
p <- p + layer(geom = "bar", geom_params = list(fill = "steelblue"), stat = "bin", 
               stat_params = list(binwidth = 2))
p


## 应用“快捷函数”,得到与上例相同的图形
p + geom_histogram(binwidth = 2, fill = "steelblue")




## 在用ggplot创建的图形对象上添加图层
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(sleep_rem/sleep_total, awake, data = msleep, geom = c("point", "smooth"))
# 或
ggplot(msleep, aes(sleep_rem/sleep_total, awake)) + geom_point() + geom_smooth()


## 例:summary给出图形对象的默认设置和每个图层的信息
p <- ggplot(msleep, aes(sleep_rem/sleep_total, awake))
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


## aes函数的参数
aes(x = weight, y = height, colour = age)
# 也可以使用变量的函数值作为参数
aes(weight, height, colour = sqrt(age))


p <- ggplot(mtcars)
summary(p)


p <- p + aes(wt, hp)
summary(p)


## 使用默认的参数映射来添加图层
p <- ggplot(mtcars, aes(x = mpg, y = wt))
p + geom_point()


## 图4.1 修改图形属性。用factor(cyl)修改颜色(左),用disp修改y坐标(右)。
p + geom_point(aes(colour = factor(cyl)))
p + geom_point(aes(y = disp))


p <- ggplot(mtcars, aes(mpg, wt))
p + geom_point(colour = "darkblue")
# 注意这里将颜色映射到'darkblue'与上面将颜色设定给'darkblue'的区别
p + geom_point(aes(colour = "darkblue"))


# The difference between (left) setting colour to \code{'darkblue'} and
# (right) mapping colour to \code{'darkblue'}.  When \code{'darkblue'}
# is mapped to colour, it is treated as a regular value and scaled with
# the default colour scale.  This results in pinkish points and a legend.


## 图4.2
## 将颜色设定为'darkblue'(左)与将颜色映射到'darkblue'(右)的区别。当颜色映
## 射到'darkblue'时,'darkblue'将被看作一个普通的字符串,使用默认的颜色标
## 度进行标度转换,结果得到了粉红色的点和图例。
qplot(mpg, wt, data = mtcars, colour = I("darkblue"))
qplot(mpg, wt, data = mtcars, colour = "darkblue")


## 图4.3 正确分组时(分组变量group =
## Subject)每个个体的折线图(左)。错误的分组时连
## 接所有观测点的折线图(右)。此处省略了分组图形属性,效果等同于group =
## 1。
data(Oxboys, package = "nlme")
# 左图的代码
p <- ggplot(Oxboys, aes(age, height, group = Subject)) + geom_line()
# 或
qplot(age, height, data = Oxboys, group = Subject, geom = "line")
# 右图的代码
qplot(age, height, data = Oxboys, geom = "line")


## 图4.4
## 给Oxboys数据添加光滑曲线。左图用了和折线图同样的分组变量,得到了每个男
## 孩的拟合直线。右图在平滑层里用了aes(group = 1),得到了所有男孩的拟合直
## 线。 左图
p + geom_smooth(aes(group = Subject), method = "lm", se = F)
# 或
qplot(age, height, data = Oxboys, group = Subject, geom = "line") + geom_smooth(method = "lm", 
                                                                                se = F)
# 右图
p + geom_smooth(aes(group = 1), method = "lm", size = 2, se = F)
# 或
qplot(age, height, data = Oxboys, group = Subject, geom = "line") + geom_smooth(aes(group = 1), 
                                                                                method = "lm", size = 2, se = F)




## 图4.5
## 如果想用箱线图来查看每个时期的身高分布,默认的分组是正确的(左图)。如果
## 想用\texttt{geom_line()}添加每个男孩的轨迹,就需要在新图层里设定
## aes(group = Subject)(右图)。 左图
qplot(Occasion, height, data = Oxboys, geom = "boxplot")
# 右图
qplot(Occasion, height, data = Oxboys, geom = "boxplot") + geom_line(aes(group = Subject), 
                                                                     colour = "#3366FF")
# 或
boysbox <- ggplot(Oxboys, aes(Occasion, height)) + geom_boxplot()
boysbox + geom_line(aes(group = Subject), colour = "#3366FF")


## 图4.6
## 对于线条和路径,线段的图形属性是由起始点的图形属性决定的。如果颜色是离
## 散的(左图),在相邻的颜色间插入其他颜色是没有任何意义的。如果颜色是连续
## 的(右图),可以在相邻的颜色间进行插补,但默认条件下R不会这样做。
df <- data.frame(x = 1:3, y = 1:3, colour = c(1, 3, 5))
qplot(x, y, data = df, colour = factor(colour), size = I(5)) + geom_line(aes(group = 1), 
                                                                         size = 2)
qplot(x, y, data = df, colour = colour, size = I(5)) + geom_line(size = 2)


## 用线性插值法做颜色渐变线条
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)


## 图4.7 一个条形图(左)按组分解后得到的叠加条形图(右),两者轮廓相同。
qplot(color, data = diamonds)
qplot(color, data = diamonds, fill = cut)


## 例:生成变量
ggplot(diamonds, aes(carat)) + geom_histogram(aes(y = ..density..), binwidth = 0.1)
# 或
qplot(carat, ..density.., data = diamonds, geom = "histogram", binwidth = 0.1)


## 图4.8 应用于条形图的三种位置调整。从左到右依次是:堆叠(stacking),填充
## (filling)和并列(dodging)
dplot <- ggplot(diamonds, aes(clarity, fill = cut))
dplot + geom_bar(position = "stack")
dplot + geom_bar(position = "fill")
dplot + geom_bar(position = "dodge")


## 图4.9 同一调整(identity
## adjustment)不适用于条形图(左),因为后画的条形会挡住先
## 画的条形。但它适用于线型图(右),因为线条不存在相互遮掩的问题。
dplot + geom_bar(position = "identity")
qplot(clarity, data = diamonds, geom = "line", colour = cut, stat = "bin", 
      group = cut)


## 图4.10 直方图的三种变体。频率多边形(frequency
## polygon)(左);散点图,点的大小和
## 高度都映射给了频率(中);热图(heatmap)用颜色来表示频率。
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")


## 例:nlme包的Oxboys数据集
require(nlme, quiet = TRUE, 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", size = 0.4)


Oxboys$fitted <- predict(model)
Oxboys$resid <- with(Oxboys, fitted - height)


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))  



推荐阅读
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • Java SE从入门到放弃(三)的逻辑运算符详解
    本文详细介绍了Java SE中的逻辑运算符,包括逻辑运算符的操作和运算结果,以及与运算符的不同之处。通过代码演示,展示了逻辑运算符的使用方法和注意事项。文章以Java SE从入门到放弃(三)为背景,对逻辑运算符进行了深入的解析。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
author-avatar
Blackage
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有