ggplot2笔记7:定位(分面和坐标系)

上传人:F****n 文档编号:97823140 上传时间:2019-09-06 格式:DOC 页数:10 大小:27.50KB
返回 下载 相关 举报
ggplot2笔记7:定位(分面和坐标系)_第1页
第1页 / 共10页
ggplot2笔记7:定位(分面和坐标系)_第2页
第2页 / 共10页
ggplot2笔记7:定位(分面和坐标系)_第3页
第3页 / 共10页
ggplot2笔记7:定位(分面和坐标系)_第4页
第4页 / 共10页
ggplot2笔记7:定位(分面和坐标系)_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《ggplot2笔记7:定位(分面和坐标系)》由会员分享,可在线阅读,更多相关《ggplot2笔记7:定位(分面和坐标系)(10页珍藏版)》请在金锄头文库上搜索。

1、ggplot2笔记7:定位(分面和坐标系) Positioning7.1 简介本章主题是图形的定位。定位由四个部分组成,前两个在前期讲过,而后两个部分在这章中会详细说到:位置调整:调整每个图层中出现重叠的对象的位置位置标度:控制数据到图形的映射分面:在一个页面上自动摆放多个图形。将数据分为多个子集,然后将每个子集依次绘制到不同面板上坐标系:控制两个独立的位置标度形成一个二维坐标系,如笛卡尔坐标系7.2 分面每个小图都代表不同的数据子集。分面可以快速地分析数据各子集模式的异同。本节讨论怎样较好微调分面,特别是和位置标度相关的方法。facet_null():默认,无分面,单一图形。face_wra

2、p():封装型,本质上是1维,为节省空间封装成二维face_grid():网格型,生成一个二维的面板由两个独立的部分组成,面板的行和列可以通过变量来定义facet_wrap()使用这个参数设置一长串面板二维排列,更加节省空间可以通过 ncol, nrow, as.table, dir等参数设置排列。如下例:library(ggplot2)# 从mpg数据集中取一个子集mpg2mpg2 <> subset(mpg, cyl != 5 & drv %in% c(4, f) & class != 2seater)base <> ggplot(mpg2, aes

3、(displ, hwy) + geom_blank() + xlab(NULL) + ylab(NULL)base# 添加分面,设置ncol或nrow(二选一即可)base + facet_wrap(class, ncol = 3)# 设置as.tablebase + facet_wrap(class, ncol = 3, as.table = FALSE)as.table决定各个分面的排列顺序。# 设置dir,水平或垂直排列base + facet_wrap(class, nrow = 3, dir = v)facet_grid()网格分面,在二维网格中展示图形。需要设定哪些变量作为分面绘图

4、的行,哪些变量作为列,中间用 短波浪线做标记。如下例:mpg2 <> subset(mpg, cyl != 5 & drv %in% c(4, f) & class != 2seater)base <> ggplot(mpg2, aes(displ, hwy) + geom_blank() + xlab(NULL) + ylab(NULL)# 一行多列base + facet_grid(. cyl)# 一列多行base + facet_grid(drv .)# 多行多列base + facet_grid(drv cyl)依次生成下列三种:控制标度 sca

5、les=fixed: x 和 y的标度在所有分面中都相同(默认) scales=free_x: x 的标度可变,y 固定 scales=free_y: y 的标度可变,x 固定 scales=free: x 和 y 的标度都可变如下例:p <> ggplot(mpg2, aes(cty, hwy) + geom_abline() + geom_jitter(width = 0.1, height = 0.1)# 默认各个分面标度一致p + facet_wrap(cyl)# 设置分面标度可变p + facet_wrap(cyl, scales = free)依次生成下图:固定标度可以

6、让我们在相同的基准上对子集进行比较自由标度可以帮助我们看到更多细节在变量y单位、数量级不同时,单独固定x轴,不限制y轴也很常用。如下例,经济数据集:> economics_long# A tibble: 2,870 x 4 date variable value value01 1 1967-07-01 pce 507 0 2 1967-08-01 pce 510 0. 3 1967-09-01 pce 516 0. 4 1967-10-01 pce 513 0. 5 1967-11-01 pce 518 0. 6 1967-12-01 pce 526 0.00158 7 1968-01

7、-01 pce 532 0.00207 8 1968-02-01 pce 534 0.00230 9 1968-03-01 pce 545 0.00322 10 1968-04-01 pce 545 0.00319 # . with 2,860 more rows按照不同的 variable变量来分面:ggplot(economics_long, aes(date, value) + geom_line() + facet_wrap(variable, scales = free_y, ncol = 1)注意,使用 facet_grid()时有个限制,因为网格分面中,每列共用一个x轴,每行共用

8、一个y轴。所以同列的分面中必须有相同的x标度,同行的分面必须有相同的y标度。在 facet_grid()中,有个参数叫 space,当 space=free时,每行的高度和该行的标度范围一致,这对分类标度很有用,如下例:其中, reorder()使得模型(model)和生产商(manufacturer)按城市油耗英里数(cty)重新排序。mpg2 <> subset(mpg, cyl != 5 & drv %in% c(4, f) & class != 2seater)mpg2$model <> reorder(mpg2$model, mpg2$cty)

9、mpg2$manufacturer <> reorder(mpg2$manufacturer, -mpg2$cty)ggplot(mpg2, aes(cty, model) + geom_point() + facet_grid(manufacturer ., scales = free, space = free) + theme(strip.text.y = element_text(angle = 0)下图为各种不同类型的小汽车的城市油耗英里数的点数:缺失分面变量下面的例子中,我们设置了俩数据框,df1和df2,其中df1中有分面变量gender,而df2里没有这个变量。这是

10、我们可以通过增加df2的图层(并且把它放在前面,要不就盖住df1的数据点了),让df2中的数据出现在每个分面中。df1 <> data.frame(x = 1:3, y = 1:3, gender = c(f, f, m)df2 <> data.frame(x = 2, y = 2)ggplot(df1, aes(x, y) +# 先写df2的数据,设置个颜色和大小加以区分 geom_point(data = df2, colour = red, size = 5) +# 这里默认的就是主函数中的映射 geom_point() + facet_wrap(gender)分

11、组和分面(Grouping vs. Facetting)通过调整颜色、形状等图形属性可以来分组,分面则是另一种分组方法。这是两种绘图技巧,而根据子集相对位置的不同,两种技巧各有优缺。在组间重叠严重时,分面:每个组都在单独的面板中,相隔比较远,组间无重叠。比较组间细微差别时,使用图形属性如下例,创建一些随机数组(x, y),然后我们先用 z颜色分组:df <> data.frame( x = rnorm(120, c(0, 2, 4), y = rnorm(120, c(1, 2, 1), z = letters1:3)ggplot(df, aes(x, y) + geom_poin

12、t(aes(colour = z)如果我们用 z分面:ggplot(df, aes(x, y) + geom_point() + facet_wrap(z)下面这个例子在一幅图中既分面,还算出了每组的平均值,又标明了颜色。首先要先加载两个没用过的包(因为用到了其中的函数),我在网上看了两个小教程,大概了解一下他们是干啥的:magrittr包:R语言高效的管道操作magrittr(http:/blog.fens.me/r-magrittr/) dplyr包:R语言数据处理利器dplyr简介(http:/ df,df <> data.frame( x = rnorm(120, c(0,

13、 2, 4), y = rnorm(120, c(1, 2, 1), z = letters1:3)创建新的数据框 df_sum,这里用到一个管道操作符 %>%,摘抄一段相关说明:magrittr包被定义为一个高效的管道操作工具包,通过管道的连接方式,让数据或表达式的传递更高效,使用操作符 %>%,可以直接把数据传递给下一个函数调用或表达式。magrittr包的主要目标有2个,第一是减少代码开发时间,提高代码的可读性和维护性;第二是让你的代码更短,再短,短短短group_by()用于对数据集按照给定变量分组,返回分组后的数据集。对返回后的数据集使用以上介绍的函数时,会自动的对分组数

14、据操作。df_sum <> df %>% group_by(z) %>% summarise(x = mean(x), y = mean(y) %>% rename(z2 = z)生成均值数据集:> df_sum# A tibble: 3 x 3 z2 x y 1 a 0.0875 0.9342 b 1.91 1.99 3 c 4.05 0.993然后创建散点分面图,第一个图层是基本散点图,第二个是通过数据处理后生成的均值数据集,并设置颜色等图形属性,最后按照 z分面:ggplot(df, aes(x, y) + geom_point() + geom_po

15、int(data = df_sum, aes(colour = z2), size = 4) + facet_wrap(z)生成图片:或者还有一种方法,就是把分面和颜色结合起来:还是上面的随机数数据集df,用 dplyr数据包中的 select()参数,选择子数据集, -z是指除去 z。df <> data.frame( x = rnorm(120, c(0, 2, 4), y = rnorm(120, c(1, 2, 1), z = letters1:3)df2 <> dplyr:select(df, -z)ggplot(df, aes(x, y) + geom_point(data = df2, colour = grey70) + geom_point(aes(colo

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号