ggplot2绘图系统——图形组合、字体选择、保存输出

1.图形组合

一页多图在基础包中利用par和layout函数来切分画布。

ggplot2是先铺好网格背景,再进行绘图,所以要通过切分网格背景来实现一页多图。

gridExtra包(grid扩展包)可用于图形排列组合、表格对象排列组合、规则多边形及椭圆的排列组合。

library(grid)
#在画布上画8图(列表)
gs <- lapply(1:8, function(i)grobTree(rectGrob(gp=gpar(fill=i,alpha=0.5)),textGrob(i)))
#按一定顺序均分画布
grid.arrange(grobs=gs,
ncol=4,
top='top label',
bottom='bottom\nlabel',
left='left label',
right='right label') #自由切分画布(layout_matrix参数)
layout <- rbind(c(1,1,1,2,3),
c(1,1,1,4,5),
c(6,7,7,8,8))
grid.arrange(grobs=gs,layout_matrix=layout) #按矩阵切分

#使用长宽比来排列组合
grid.arrange(grobs=gs[1:3],ncol=2,widths=1:2,#定义宽度比
heights=unit(c(1,10),c('in','mm')),#定义高度(绝对值)
top='arrange with proportion')

2. 图形字体选择及中文绘制

针对windows系统的字体(windows/Fonts路径下),windowsFont和windowsFonts函数。

#从windows字体库中提取字体并命名
windowsFonts(font1=windowsFont('Book Antiqua'),
font2=windowsFont('Cambria'),
font3=windowsFont('华文中宋'),
font4=windowsFont('楷体'))
plot(1:10)
text(1.5,2,labels = 'Hello',family='font1',cex=2)
text(3,4,labels = 'World',family='font2',cex=2)
text(5,6,labels = '你好',family='font3',cex=2)
text(8,9,labels = '世界',family='font4',cex=2) #很多英文字体对中文不起作用



ggplot2绘图系统一样。

MAC系统

#显示中文
Sys.setlocale(category = 'LC CTYPE',locale = 'zh_CN.UTF-8') #字体选择
plot(1:10)
text(1.5,2,labels = 'Hello',family='Times New Roman',cex=2)
text(5,6,labels = '你好',family='楷体',cex=2)

中文不显示问题:

如果在Rstudio中字体编码改成UTF-8后,绘制的图形的中文还是被方框替代,则在theme函数中设置中文字体即可。

ggplot(mtcars,aes(wt,mpg))+
geom_point(color='red')+
ggtitle('这是一幅含有中文的散点图')+
theme(plot.title = element_text(size = 18,
family = 'STKaiti')) #或楷体

3. 图形保存和输出

杂志一般要求:

位图分辨率不少于300dpi,或矢量图(pdf/eps)或tiff格式。

tiff函数及参数:

tiff(
filename = 'test.tiff',
width = 480,
height = 480,
units = 'px', #可改为cm
pointsize = 12,
compression = , #图片压缩形式,一般不设
bg='white',
res = , #分辨率,ppi
type = c('cairo','windows') #图形导出类型
)

示例。

tiff('/my/path/plot.tiff',
width = 1200,
height = 1300.
res=300)
ggplot(mtcars,aes(mpg,y=wt,color=factor(gear)))+
geom_point()
dev.off() #关闭作图窗口

ggsave函数

ggplot(mtcars,aes(mpg,wt))+geom_point()
ggsave('test.pdf')
#dpi默认300,无需dev.off关闭绘图框

Cairo扩展包

流行的开源2D图形渲染引擎,支持各种输出设备。输出高清图片将图片放大也不失真。

Cairo和基础包grDevices中的函数对应。

  • CairoPNG---grDevices:png()。
  • CairoTIFF---grDevices:tiff()。
  • CairoPDF---grDevices:pdf()。

加载包后,ggsave默认以Cairo处理图片。

library(Cairo)
Cairo.capabilities() #支持的图片格式 p = ggplot(iris,aes(x = Species,y = Sepal.Length,colour = Species))
plot1 = p+geom_point()
#ggsave默认以Cairo处理图片
ggsave("test1.png",plot1,width = 4,height = 3 )

R语言与医学统计图形-【27】ggplot2图形组合、字体、保存的更多相关文章

  1. R语言与医学统计图形【1】par函数

    张铁军,陈兴栋等 著 R语言基础绘图系统 基础绘图包之高级绘图函数--par函数 基础绘图包并非指单独某个包,而是由几个R包联合起来的一个联盟,比如graphics.grDevices等. 掌握par ...

  2. R语言与医学统计图形【5】饼图、条件图

    R语言基础绘图系统 基础图形--饼图.克利夫兰点图.条件图 6.饼图 pie(rep(1,26),col=rainbow(26), labels = LETTERS[1:26], #标签 radius ...

  3. R语言与医学统计图形【8】颜色的选取

    R语言基础绘图系统 基础绘图包之低级绘图函数--内置颜色. 1.内置颜色选取 功能657种内置颜色.colors() 调色板函数:palette(), rgb(), rainbow(). palett ...

  4. R语言与医学统计图形【6】低级绘图函数

    R语言基础绘图系统 基础绘图包之低级绘图函数--定义坐标轴.图例.文本 低级绘图函数:本身不具备图形绘制能力,只是在已有图形基础上添加元素. 函数 功能 arrows 添加箭头 axis 坐标轴 bo ...

  5. R语言与医学统计图形【4】直方图、金字塔图

    R语言基础绘图系统 基础图形--直方图.金字塔图 3.直方图 参数设置及比较. op <- par(mfrow=c(2,3)) data <- rnorm(100,10,5) hist(d ...

  6. R语言与医学统计图形【3】条形图、误差图

    R语言基础绘图系统 基础图形--条形图.误差图 3.条形图 barplot接收的数据是矩阵而非数据框. data <- sample(c(50:80),5) barplot(data,col=h ...

  7. R语言与医学统计图形【2】散点图、盒形图

    R语言基础绘图系统 基础图形--散点图.盒形图 plot是一个泛型函数(generic method),对于不同的数据绘制不同的图形. par函数的大部分参数在plot中通用. 1.散点图 plot绘 ...

  8. R语言与医学统计图形【7】低级绘图函数

    R语言基础绘图系统 基础绘图包之低级绘图函数--气泡图.一页多图.背景网格.添加线条和散点.数学表达式 4.气泡图 symbols是高级绘图函数,可在图上添加标记,标记的形状包括:circles,sq ...

  9. R语言与医学统计图形-【28】ggplot2扩展包ggrepel、ggsci、gganimate、ggpubr

    ggplot2绘图系统--扩展包ggrepel.ggsci.gganimate.ggpubr等 部分扩展包可在CRAN直接下载,有些需借助devtools包从Github下载. 1. ggrepel包 ...

随机推荐

  1. [no code][scrum meeting] Alpha 14

    项目 内容 会议时间 2020-04-22 会议主题 周中讨论会议 会议时长 45min 参会人员 全体成员 $( "#cnblogs_post_body" ).catalog() ...

  2. 2020年OO助教工作总结

    随着这学期课程的落幕,我一学期的OO助教工作也宣告结束.这学期我的工作主要在系统组,和OO后台的数据库打交道. 作业查重 我几乎每周都会做的例行工作,是对每周的homework进行查重管理.由于使用了 ...

  3. 零基础入门c语言函数之递归函数

    今天来总结一下关于递归函数的使用方面的问题. 递归函数就是在函数使用的时候自己调用自己,层层调用,来实现你想要的功能. 有两个最常用的例子,我们来写一下. (1)计算阶乘 #include int f ...

  4. 我的一些JAVA基础见解

    这个学期学习JAVA基础课,虽说之前都自学过,但在学习时仍可以思考一些模糊不清的问题,可以更深一步的思考.在这里写下一些需要深入的知识点,对小白们也很友好~ 一.Java数据类型 1.基本数据类型 这 ...

  5. Flutter应用在夜神模拟器启动白屏问题

    Flutter应用在夜神模拟器启动白屏问题 flutter run  出现如下错误 [ERROR:flutter/shell/gpu/gpu_surface_gl.cc(39)] Failed to ...

  6. 助你上手Vue3全家桶之Vue-Router4教程

    目录 1,前言 1,Router 2.1,跳转 2.2,打开新页面 3,Route 4,守卫 4.1,onBeforeRouteLeave 4.2,onBeforeRouteUpdate 4.3,路由 ...

  7. Jquery校验中国身份证号码是否正确

    在项目中使用表单时经常会涉及到身份证号码是否正确的校验,下面看看应该中国二代身份证号码应该怎么用Jquery校验呢? 二代身份证校验码的计算方法 二代身份证由17位数字和一位校验码组成,那么校验方法是 ...

  8. hdu 5018 Revenge of GCD

    题意: 给你两个数:X和Y  .输出它们的第K大公约数.若不存在输出 -1 数据范围: 1 <= X, Y, K <= 1 000 000 000 000 思路: 它俩的公约数一定是gcd ...

  9. C++实现一个SOAP客户端

    目录 简介 实现客户端 准备xml文件 引入库文件 构建请求数据的xml 执行Http协议的POST方法 解析响应数据的xml 测试客户端 附件 简介 在C++中,一般使用gSOAP来实现客户端.服务 ...

  10. cloudstack部署

    参考文档 https://blog.csdn.net/u012124304/article/details/80960504#Mysql_37 cloudstack的rpm包下载地址 http://d ...