热门标签 | 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))  



推荐阅读
  • 基于词向量计算文本相似度1.测试数据:链接:https:pan.baidu.coms1fXJjcujAmAwTfsuTg2CbWA提取码:f4vx2.实验代码:imp ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了10分钟了解Android的事件分发相关的知识,希望对你有一定的参考价值。什么是事件分发?大家 ... [详细]
  • keras归一化激活函数dropout
    激活函数:1.softmax函数在多分类中常用的激活函数,是基于逻辑回归的,常用在输出一层,将输出压缩在0~1之间,且保证所有元素和为1,表示输入值属于每个输出值的概率大小2、Si ... [详细]
  • IB 物理真题解析:比潜热、理想气体的应用
    本文是对2017年IB物理试卷paper 2中一道涉及比潜热、理想气体和功率的大题进行解析。题目涉及液氧蒸发成氧气的过程,讲解了液氧和氧气分子的结构以及蒸发后分子之间的作用力变化。同时,文章也给出了解题技巧,建议根据得分点的数量来合理分配答题时间。最后,文章提供了答案解析,标注了每个得分点的位置。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • 本博文基于《Amalgamationofproteinsequence,structureandtextualinformationforimprovingprote ... [详细]
  • 关于如何快速定义自己的数据集,可以参考我的前一篇文章PyTorch中快速加载自定义数据(入门)_晨曦473的博客-CSDN博客刚开始学习P ... [详细]
  • 如何用Matlab快速画出带有3D渲染效果的复杂曲面
    简要地介绍了一下如何用Matlab快速画出带有3D渲染效果的复杂曲面图,包括三维曲面绘制、光线、材质、着色等等控制,以及如何 ... [详细]
  • 语义分割系列3SegNet(pytorch实现)
    SegNet手稿最早是在2015年12月投出,和FCN属于同时期作品。稍晚于FCN,既然属于后来者,又是与FCN同属于语义分割网络 ... [详细]
  • 动态多点××× 单云双HUB
    动态多点是一个高扩展的IPSEC解决方案传统的ipsecS2S有如下劣势1.中心站点配置量大,无论是采用经典ipsec***还是采用greoveripsec多一个分支 ... [详细]
author-avatar
aofeng12_313
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有