• R语言与医学统计图形-【27】ggplot2图形组合、字体、保存


    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
    label',
                 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) #按矩阵切分
    

    image.png

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

    image.png

    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)
    
    #很多英文字体对中文不起作用
    

    image.png
    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 )
    
  • 相关阅读:
    sql 读取txt 文件内容,并写入sql的方法
    Thread.Mutex 互斥体
    SQL语句创建登录名,数据库用户,数据库角色及分配权限:
    倾国倾城 歌词
    LINUX下c/c++的学习(4)linux file and direction(stat fstat lstat access umask chmod ...)
    飞蛾扑火
    生成验证码点击可刷新
    C#项目调用非托管代码函数的方法
    【学习】数据库事务
    如何判断数据库是否存在
  • 原文地址:https://www.cnblogs.com/jessepeng/p/12307819.html
Copyright © 2020-2023  润新知