[关闭]
@K1999 2016-07-04T08:38:38.000000Z 字数 1631 阅读 1813

数据可视化ggplot2系列——分面

R 数据可视化


0. 准备

  1. library(ggplot2)
  2. set.seed(100)
  3. d.sub <- diamonds[sample(nrow(diamonds), 500), ]
  4. head(d.sub, 4)
  5. theme_set(theme_bw())
  6. p <- ggplot(data=d.sub, aes(x=carat, y=price))

1 缠绕分面 facet_wrap

  1. levels(d.sub$cut)
  2. p + geom_point() + facet_wrap(~cut)

facet_wrap()函数:

  1. facet_wrap(facets,
  2. nrow = NULL,
  3. ncol = NULL,
  4. scales = "fixed",
  5. shrink = TRUE,
  6. as.table = TRUE,
  7. drop = TRUE)

facets:分面参数如 ~cut,表示用 cut 变量进行数据分类
nrow:绘制图形的行数
ncol:绘制图形的列数,一般nrow/ncol只设定一个即可
scales:坐标刻度的范围,可以设定四种类型。
   fixed 表示所有小图均使用统一坐标范围;
   free表示每个小图按照各自数据范围自由调整坐标刻度范围;
   free_x为自由调整x轴刻度范围;
   free_y为自由调整y轴刻度范围。
shrinks:也和坐标轴刻度有关,如果为TRUE(默认值)则按统计后的数据调整刻度范围,否则按统计前的数据设定坐标。
as.table:和小图排列顺序有关的选项。如果为TRUE(默认)则按表格方式排列,即最大值(指分组level值)排在表格最后即右下角,否则排在左上角。
drop:是否丢弃没有数据的分组,如果为TRUE(默认),则空数据组不绘图。

下面看看 scales 的设定效果:

  1. p + geom_point() + facet_wrap(~cut, scales="free") + ggtitle('scales="free"')
  2. p + geom_point() + facet_wrap(~cut, scales="free_y") + ggtitle('scales="free_y"')

2 格网分面 facet_grid

  1. qplot(carat, price, data=diamonds, alpha=I(0.2)) + facet_grid(color~cut)

显然参数 color~cut对数据的分组和小图排列有决定作用,波浪号前为小图分行标准,后面为分列标准。

  1. facet_grid(facets,
  2. margins = FALSE,
  3. scales = "fixed",
  4. space = "fixed",
  5. shrink = TRUE,
  6. labeller = "label_value",
  7. as.table = TRUE,
  8. drop = TRUE)

和facet_wrap比较,除不用设置ncol和nrow外(facets公式已经包含)外还有几个参数不同:

margins:这不是设定图形边界的参数。它是指用于分面的包含每个变量元素所有数据的数据组。

  1. qplot(carat, price, data=diamonds, alpha=I(0.2)) + facet_grid(color~cut, margins=TRUE)

space:这个参数要配合scales使用,如果为fixed(默认),所有小图的大小都一样,如果为free/free_x/free_y,小图的大小将按照坐标轴的跨度比例进行设置。

  1. qplot(carat, price, data=diamonds, alpha=I(0.2)) + facet_grid(color~cut, space="free_x", scales="free_x")

labeller:这是设定小图标签的,facet_grid的函数说明档讲得比较明白,参考之。或许会在后面介绍。
下面简单看看2个以上分组标准获得什么样的图:

  1. qplot(carat, price, data=diamonds, alpha=I(0.2)) + facet_grid(color+clarity~cut)
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注