专栏首页优雅R「R」cowplot(四)图形排列

「R」cowplot(四)图形排列

基本用法

plot_grid()提供了将图形排列进网格以及为它们添加标签的简单接口:

require(cowplot)
theme_set(theme_cowplot(font_size=12)) # reduce default font size
plot.mpg <- ggplot(mpg, aes(x = cty, y = hwy, colour = factor(cyl))) +
  geom_point(size=2.5)
plot.diamonds <- ggplot(diamonds, aes(clarity, fill = cut)) + geom_bar() +
  theme(axis.text.x = element_text(angle=70, vjust=0.5))
plot_grid(plot.mpg, plot.diamonds, labels = c('A', 'B'))

如果你指定labels="AUTO"labels="auto",那么标签会自动按照大写或小写排列:

plot_grid(plot.mpg, plot.diamonds, labels = "AUTO")
plot_grid(plot.mpg, plot.diamonds, labels = "auto")

默认,图形不会进行对齐,大多数情况下可以通过align选项对齐:

plot_grid(plot.mpg, plot.diamonds, labels = "AUTO", align = 'h')
plot_grid(plot.mpg, plot.diamonds, labels = "AUTO", ncol = 1, align = 'v')

对于绘图元素的数目不同这种更复杂的组合情形,对齐会变得更麻烦。这时,你也需要通过axis选项指定你想要对齐的边界。例如,要对齐一个分面图和一个非分面图,让它们左边轴对齐,我们可以用下面的代码:

plot.iris <- ggplot(iris, aes(Sepal.Length, Sepal.Width)) +
  geom_point() + facet_grid(. ~ Species) + stat_smooth(method = "lm") +
  background_grid(major = 'y', minor = "none") + # add thin horizontal lines
  panel_border() # and a border around each panel
plot_grid(plot.iris, plot.mpg, labels = "AUTO", ncol = 1,
          align = 'v', axis = 'l') # aligning vertically along the left axis

支持的图形类型

函数plot_grid()可以处理几种不同的图形类型,包括ggplot类,gtable以及基本图形等。

For example, the following creates a recordedPlot object by recording a previous plot (plot(sqrt)):

par(xpd = NA, # switch off clipping, necessary to always see axis labels
    bg = "transparent", # switch off background to avoid obscuring adjacent plots
    oma = c(2, 2, 0, 0), # move plot to the right and up
    mgp = c(2, 1, 0) # move axis labels closer to axis
  )
plot(sqrt) # plot the square root function

(这个图片自动黑掉,啥情况~)

recordedplot <- recordPlot() # record the previous plot

定义一个创建图形的函数:

plotfunc <- function() image(volcano) # define the function
plotfunc() # call the function to make the plot

一个用grid绘制的圆:

gcircle <- grid::circleGrob()
ggdraw(gcircle)

现在使用plot_grid()进行组合:

plot_grid(plot.mpg, recordedplot, plotfunc, gcircle, labels = "AUTO", hjust = 0, vjust = 1,
          scale = c(1., 1., 0.9, 0.9))

注意许多对齐选项对除ggplot对象的其他图形不适用。

精细调节图形显示

使用 label_size调节标签大小,默认是14。

plot_grid(plot.mpg, plot.diamonds, labels = "AUTO", align = 'h', label_size = 12)

你也可以调节字体家族,字面,标签颜色:

plot_grid(plot.mpg, plot.diamonds, labels = "AUTO", align = 'h', label_fontfamily = "serif",
          label_fontface = "plain", label_colour = "blue")

label_xlabel_y参数可以移动标签, 另外可以通过hjustvjust参数进行矫正。例如,将标签摆在左下角:

plot_grid(plot.mpg, plot.diamonds, labels = "AUTO", align = 'h', label_size = 12,
          label_x = 0, label_y = 0, hjust = -0.5, vjust = -0.5 )

也可以通过对这些选项传入向量调节每个标签的细节(没有展示例子)。

你也可以调节行列的相对高度和宽度:

plot_grid(plot.mpg, plot.diamonds, labels = "AUTO", align = 'h', rel_widths = c(1, 1.3))

嵌套网格

你可以通过在一个plot_grid()中嵌套另外一个plot_grid()

bottom_row <- plot_grid(plot.mpg, plot.diamonds, labels = c('B', 'C'), align = 'h', rel_widths = c(1, 1.3))
plot_grid(plot.iris, bottom_row, labels = c('A', ''), ncol = 1, rel_heights = c(1, 1.2))

(注意这种情况下我们需要手动设置标签),如果对上面的图形进行排列相当有难度,不过我们可以通过align_plots()函数实现。

# first align the top-row plot (plot.iris) with the left-most plot of the
# bottom row (plot.mpg)
plots <- align_plots(plot.mpg, plot.iris, align = 'v', axis = 'l')
# then build the bottom row
bottom_row <- plot_grid(plots[[1]], plot.diamonds,
                        labels = c('B', 'C'), align = 'h', rel_widths = c(1, 1.3))
# then combine with the top row for final plot
plot_grid(plots[[2]], bottom_row, labels = c('A', ''), ncol = 1, rel_heights = c(1, 1.2))

本文分享自微信公众号 - 优雅R(elegant-r),作者:王诗翔

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-01-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 「R」cowplot(一)介绍

    cowplot是ggplot2包的一个简单插件(或称拓展包),它的目的是为ggplot2提供一个出版级别的主题,使用少量代码即可实现主题统一的修改,如轴标签大小...

    王诗翔呀
  • 「R」R传统图形绘制多图

    mfrow 和 mfcol 都由 2 个数字指定,一个表示行数、一个表示列数。如果使用 mfrow,那么图像区域会被按行依次使用;如果使用 mfcol,那么图像...

    王诗翔呀
  • 「R」ggplot2拼图包patchwork推荐与使用

    patchwork是基于ggplot2的拼图包,因为ggplot2本身没有强大的拼图语法,而一般使用的gridExtra与cowplot的拼ggplot2图形都...

    王诗翔呀
  • 【R语言入门】R语言环境搭建

    R 语言是一个功能十分强大的工具,几乎绝大多数的数据分析工作都可以在 R 中完成,并且拥有很极强的绘图功能支持,能让你手中的数据以各种姿势进行可视化呈现,而且支...

    弗兰克的猫
  • python matplotlib.pyplot.plot()参数用法

    默认情况下,每个行被指定一个由“颜色周期”指定的不同颜色。要改变这种行为,可以编辑axes.color_cycle中的rcparam。

    砸漏
  • R语言之可视化①⑥一页多图(2)目录

    cowplot包是ggplot2的简单附加组件。 它旨在为ggplot2提供一个出版物就绪的主题,这个主题需要最少量的轴标签尺寸,情节背景等。对'ggplot2...

    用户1359560
  • Python数据可视化——matplotlib使用

    总第57篇 01|Figure和Subplot: matplotlib的图像都位于figure对象中,相当于一块画布。figure的属性figsize是用来设置...

    张俊红
  • @程序员,这才是真正的大数据工程师!

    最近,谷歌爸爸又收购了一家公司。长期以来,谷歌致力于推动围绕 GoogleCloud 的企业业务,但在这方面一直被亚马逊和微软吊打,这次的收购正是为了弥补自身的...

    CSDN技术头条
  • 中国台湾大学林轩田机器学习基石课程学习笔记9 -- Linear Regression

    上节课,我们主要介绍了在有noise的情况下,VC Bound理论仍然是成立的。同时,介绍了不同的error measure方法。本节课介绍机器学习最常见的一种...

    红色石头
  • 优秀程序员和一般程序员,你是哪一种?

    优秀程序员:在有需求与任务时,会不断地询问需求与任务,并且多次确认想要的结果,再动手写代码。

    昱良

扫码关注云+社区

领取腾讯云代金券