ggplot2-分面(facet) 一页多图

本文更新地址:http://blog.csdn.net/tanzuozhev

本文在 http://www.cookbook-r.com/Graphs/Facets_(ggplot2)/的基础上加入了自己的理解

ggplot2的数据分面就是根据数据中的不同分组,绘制多个图形.

数据预览

library(reshape2)
head(tips)
##   total_bill  tip    sex smoker day   time size
## 1      16.99 1.01 Female     No Sun Dinner    2
## 2      10.34 1.66   Male     No Sun Dinner    3
## 3      21.01 3.50   Male     No Sun Dinner    3
## 4      23.68 3.31   Male     No Sun Dinner    2
## 5      24.59 3.61 Female     No Sun Dinner    4
## 6      25.29 4.71   Male     No Sun Dinner    4

绘制散点图

library(ggplot2)

sp <- ggplot(tips, aes(x=total_bill, y=tip/total_bill)) + geom_point(shape=1)
sp

facet_grid

facet_grid() 可以根据数据的不同分组, 将图形按照 水平或者垂直方向 进行分割.共享x轴或者轴.

# 垂直方向进行分割
sp + facet_grid(sex ~ .)

# 水平方向分割
sp + facet_grid(. ~ sex)

# 对 sex 进行垂直分割, 对 day 进行水平分割
sp + facet_grid(sex ~ day)

facet_wrap

facet_wrap()可以根据行列的数值进行分割

# 水平分割, 分为两列
sp + facet_wrap( ~ day, ncol=2)

修改分页的标签外观

sp + facet_grid(sex ~ day) +
    theme(strip.text.x = element_text(size=8, angle=75),
          strip.text.y = element_text(size=12, face="bold"),
          strip.background = element_rect(colour="red", fill="#CCCCFF"))

修改分页标签文字

labels <- c(Female = "Women", Male = "Men")
sp + facet_grid(. ~ sex, labeller=labeller(sex = labels))

或者直接进行赋值

tips2 <- tips
levels(tips2$sex)[levels(tips2$sex)=="Female"] <- "Women"
levels(tips2$sex)[levels(tips2$sex)=="Male"]   <- "Men"
head(tips2, 3)
##   total_bill  tip   sex smoker day   time size
## 1      16.99 1.01 Women     No Sun Dinner    2
## 2      10.34 1.66   Men     No Sun Dinner    3
## 3      21.01 3.50   Men     No Sun Dinner    3
# Both of these will give the same output:
sp2 <- ggplot(tips2, aes(x=total_bill, y=tip/total_bill)) + geom_point(shape=1)
sp2 + facet_grid(. ~ sex)

labeller

labeller() 通过输入一个方法, 对字符串进行该方法处理的,重新返回字符串.

# Reverse each strings in a character vector
reverse <- function(strings) {
    strings <- strsplit(strings, "")
    vapply(strings, function(x) {
        paste(rev(x), collapse = "")
    }, FUN.VALUE = character(1))
}

sp + facet_grid(. ~ sex, labeller=labeller(sex = reverse))

设置范围

一般情况下, 坐标轴的范围是固定的,也就是每幅图都有相同的尺寸和范围, 当然也可以设置freefree_x, 或者 free_y自由改变坐标轴的范围.

hp <- ggplot(tips, aes(x=total_bill)) + geom_histogram(binwidth=2,colour="white")

# Histogram of total_bill, divided by sex and smoker
hp + facet_grid(sex ~ smoker)

# scales="free_y", y轴自由设置
hp + facet_grid(sex ~ smoker, scales="free_y")

# With panels that have the same scaling, but different range (and therefore different physical sizes)
hp + facet_grid(sex ~ smoker, scales="free", space="free")

时间: 2024-11-05 17:28:47

ggplot2-分面(facet) 一页多图的相关文章

dedecms列表页有图调用缩略图无图留空的方法

默认情况下,织梦的文章列表页会调用出当前栏目下的文章列表,并且调用出每个文章的缩略图:如果文章本身就有图,会调用出一张小图,如果没有,则会显示默认的织梦图片.这种处理方式有时候比较影响美观,其实可以修改一下代码,实现如下功能: 如果列表页中的文章本身有图,则在列表页中显示此文章的缩略图:如果文章没有图,则不显示任何图片.其实也就是去掉默认织梦的“暂无图片”的小图,让页面看起来更美观一些. 找到模板目录下的文件:list_article.htm,将列表部分的默认的代码修改如下: <div clas

R语言与医学统计图形-【14】ggplot2几何对象之直方密度图

ggplot2绘图系统--几何对象之直方图.密度图 1.直方图 参数. geom_histogram(mapping = , data = , stat = 'bin', #统计变换,概率密度为density position = 'stack', binwidth = , #条柱宽度 bins = , #条柱数目,默认30 na.rm = FALSE, show.legend = NA, inherit.aes = TRUE ) 示例. ggplot(diamonds,aes(carat))+

Html5添加Tabs样式单页多图轮播图插件教程

一.HTML结构 <div id="slideBox"> <div class="J_slide"> <!-- 轮播图 --> <div class="J_slide_clip"> <ul class="J_slide_list"> <li class="J_slide_item"> <a href="javascrip

WORD里怎样能做到局部“分栏”就是一页里有的分有的不分

选中你要分的部分再分栏如果不想分的部分也被分了,那就可以选中不想分的那部分,选择“分栏”->“一栏” 转自:http://zhidao.baidu.com/question/9873268.html?qbl=relate_question_0&word=word%20%B7%D6%C0%B8%20%D6%D0%B6%CF&optimi=4

jquery自己主动旋转的登录界面的背景代码登录页背景图

在其他网站上看到比较爽Web登录界面.背景图片可以自己主动旋转. 介绍给大家.有兴趣的可以改改下来作为自己的系统登录界面. 如图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlzZW55YW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" > 下载源代码 版权声明:本文博客原创文章,博客,未经同意,不得转载.

R语言一页多图

require(ggplot2) require(Cairo) require(grid) p = ggplot(iris,aes(x = Species,y = Sepal.Length,colour = Species)) p+geom_point() a = p+geom_point() b = qplot(Sepal.Length,Petal.Length,data=iris,geom="point",colour = Species) c = qplot(Species,Se

iOS开发启动页引导图

1.下面的代码写在 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 2. 引进附件里的类, 记得改类里的图片啊啥的(http://files.cnblogs.com/files/godlovexq/UDP.zip) if (![[NSUserDefaults standardUserDefaults] boolForKey:@"

R: 一页显示多张图的方法

################################################### 问题:一页多图显示   18.4.30 怎么实现,在一页上画多幅图,并且安排图的大小.个数等??? 解决方案: open <- par(mfrow = c(2,2),mar=c(3,3,2,1)) r(open) layout(matrix(1:6,3,2))   #将当前装置分割为3行2列的布局 layout.show(6)   #显示布局的编号 layout(matrix(1:6,2,3)

R语言与医学统计图形-【15】ggplot2几何对象之线图

ggplot2绘图系统--几何对象之线图 曲线:点连线.路径曲线.时间序列曲线.模型拟合曲线...... 直线:水平直线.垂直直线.斜线. 1.曲线 对象及其参数. #路径图 geom_path(mapping = , data = , stat = 'identity', position = 'identity', lineend = 'butt', #线段两端样式,round/square linejoin = 'round', #线段交叉样式,mitre/bevel linemitre