ggplot2|详解八大基本绘图要素(四)

简介: ggplot2|详解八大基本绘图要素(四)

本文首发于“生信补给站”公众号 https://mp.weixin.qq.com/s/UMuZ1MiuKDheHk9mwA9EXA

七 图层(Layer)

ggplot的强大之处在于直接使用+号即可实现叠加图层,前面散点图添加拟合曲线即为图层叠加。

ggplot(mpg, aes(displ, hwy)) +geom_point() +geom_smooth() +stat_smooth(method = lm, se = TRUE)

image.png

ggplot函数可以设置数据和映射,每个图层设置函数(geom_xxx和stat_xxx)也都可以设置数据和映射,这虽然便利,但也可能产生一些混乱。

ggplot2的图层设置函数对映射的数据类型是有较严格要求的,比如geom_point和geom_line函数要求x映射的数据类型为数值向量,而geom_bar函数要使用因子型数据。如果数据类型不符合映射要求就得做类型转换,在组合图形时还得注意图层的先后顺序。


八 分面(Facet)

分面设置在ggplot2应该也是要经常用到的一项画图内容,在数据对比以及分类显示上有着极为重要的作用,

facet_wrap 和 facet_grid是两个经常要用到的分面函数。

1 facet_wrap:基于一个因子进行设置,形式为:~变量(~单元格)

#cyl变量进行分面

p<-ggplot(mtcars,aes(mpg,hp))+geom_point()

p+facet_wrap(~cyl)

#每个分面单独的坐标刻度,单独对x轴设置

#scales参数fixed表示固定坐标轴刻度,free表示反馈坐标轴刻度,也可以单独设置成free_x或free_y

p+facet_wrap(~cyl,scales="free")

 

#每个分面单独的坐标刻度,单独对y轴设置

#nrow,ncol参数为数值,表示 分面设置成几行和几列

p+facet_wrap(~carb,scales="free",nrow=1)


  

对nrow设置后的效果图表变得比较拥挤,正常情况下,facet_wrap自然生成的图片,只设置scale = free 会相对比较好看。

2 facet_grid:基于两个因子进行设置,形式为:变量~变量(行~列),如果把一个因子用点表示,也可以达到facet_wrap的效果,也可以用加号设置成两个以上变量

p+facet_grid(vs~cyl)

  

#space 表示分面空间是否可以按照数据进行缩放,参数和scales一样

p+facet_grid(vs~cyl,scales="free",space="free")

  

从上图可以看出把scales 和space 都设置成free之后,不仅坐标刻度不一样了,连每个分面的大小也不一样了。

#margins 通过TRUE或者FALSE表示否设置而一个总和的分面变量,默认情况为FALSE,即不设置

p+facet_grid(vs~cyl,margins=TRUE)

分面可以让我们按照某种给定的条件,对数据进行分组,然后分别画图。


九 主题(Theme)

ggplot画图之后,需要根据需求对图进行”精雕细琢“,title, xlab, ylab毋庸置疑,其他的细节也需修改。

1 theme参数修改

详细参数可参考:ggplot2-theme(主题)

p <- ggplot(data = diamond) +geom_point(aes(x=carat, y=price, colour=color,shape=cut))

p + labs(title="学习ggplot2可视化",subtitle = "参数好多",caption = "熟能生巧")+
theme(plot.title=element_text(face="bold.italic",color="steelblue",size=24, hjust=0.5,vjust=0.5,angle=360,lineheight=113))

下面为theme的相关参数,可以细节修改处,之后的后面会继续补充。

function (base_size = 12, base_family = "")
 {
     theme(line = element_line(colour = "black", size = 0.5, linetype = 1,
         lineend = "butt"), rect = element_rect(fill = "white",
         colour = "black", size = 0.5, linetype = 1), text = element_text(family = base_family,
         face = "plain", colour = "black", size = base_size, hjust = 0.5,
         vjust = 0.5, angle = 0, lineheight = 0.9), axis.text = element_text(size = rel(0.8),
         colour = "grey50"), strip.text = element_text(size = rel(0.8)),
         axis.line = element_blank(), axis.text.x = element_text(vjust = 1),
         axis.text.y = element_text(hjust = 1), axis.ticks = element_line(colour = "grey50"),
         axis.title.x = element_text(), axis.title.y = element_text(angle = 90),
         axis.ticks.length = unit(0.15, "cm"), axis.ticks.margin = unit(0.1,
             "cm"), legend.background = element_rect(colour = NA),
         legend.margin = unit(0.2, "cm"), legend.key = element_rect(fill = "grey95",
             colour = "white"), legend.key.size = unit(1.2, "lines"),
         legend.key.height = NULL, legend.key.width = NULL, legend.text = element_text(size = rel(0.8)),
         legend.text.align = NULL, legend.title = element_text(size = rel(0.8),
             face = "bold", hjust = 0), legend.title.align = NULL,
         legend.position = "right", legend.direction = NULL, legend.justification = "center",
         legend.box = NULL, panel.background = element_rect(fill = "grey90",
             colour = NA), panel.border = element_blank(), panel.grid.major = element_line(colour = "white"),
         panel.grid.minor = element_line(colour = "grey95", size = 0.25),
         panel.margin = unit(0.25, "lines"), strip.background = element_rect(fill = "grey80",
             colour = NA), strip.text.x = element_text(), strip.text.y = element_text(angle = -90),
         plot.background = element_rect(colour = "white"), plot.title = element_text(size = rel(1.2)),
         plot.margin = unit(c(1, 1, 0.5, 0.5), "lines"), complete = TRUE)
 }

2 ggplot2 默认主题

除此外,ggplot2提供一些已经写好的主题,比如theme_grey()为默认主题,theme_bw()为白色背景主题,theme_classic()为经典主题。

p + theme_classic()

3 ggplot2 扩展包主题

library(ggthemes)

p + theme_stata()

除上述外,ggthemes包还提供其他主题,小伙伴们自己尝试吧。

theme_economist theme_economist_white

theme_wsj    theme_excel

theme_few    theme_foundation

theme_igray  theme_solarized

theme_stata  theme_tufte

4 自定义主题

可根据常见需要自定义常用主题

theme_MJ <- function(..., bg='white'){

   require(grid)

   theme_classic(...) +

       theme(rect=element_rect(fill=bg),

             plot.margin=unit(rep(1,4), 'lines'),

             panel.border=element_rect(fill='transparent', color='transparent'),

             panel.grid=element_blank(),

             axis.title = element_text(color='black', vjust=0.1),

             axis.ticks.length = unit(-0.1,"lines"),

             axis.ticks = element_line(color='black'),

             legend.title=element_blank(),

             legend.key=element_rect(fill='transparent', color='transparent'))

}

p + theme_MJ() + labs(title="学习ggplot2可视化",subtitle = "参数好多记不住?",caption = "熟能生巧!")


以上就是ggplot2的八大要素,七颗龙珠可召唤神龙,八大要素合理使用可画出“神龙”,🤭!!!

相关文章
|
编解码 数据可视化 索引
Matplotlib引领数据图表绘制
Matplotlib引领数据图表绘制
|
自然语言处理 数据可视化 算法
第5章 数据可视化——5.4 四维图形可视化
第5章 数据可视化——5.4 四维图形可视化
|
3月前
|
数据可视化 物联网 区块链
探索Python中的数据可视化:使用Matplotlib和Seaborn绘制图表探索未来:区块链、物联网与虚拟现实的融合趋势与应用前景
【8月更文挑战第30天】本文旨在引导读者通过Python编程语言,利用Matplotlib和Seaborn库,轻松掌握数据可视化技术。文章以浅显易懂的语言,结合实用的代码示例,从基础的图表绘制到高级定制功能,逐步深入讲解如何在数据分析中运用这些工具。无论你是编程新手还是希望提升可视化技能的开发者,都能在这篇文章中找到有价值的信息,让你的数据“活”起来。
|
6月前
|
数据可视化 定位技术 网络架构
R语言在地图上绘制月亮图、饼状图数据可视化果蝇基因种群
R语言在地图上绘制月亮图、饼状图数据可视化果蝇基因种群
|
6月前
|
算法 数据可视化
R语言社区检测算法可视化网络图:ggplot2绘制igraph对象分析物种相对丰度
R语言社区检测算法可视化网络图:ggplot2绘制igraph对象分析物种相对丰度
|
6月前
|
数据采集 存储 数据可视化
python数据分析——数据可视化(图形绘制基础)
为了绘制好数据可视化图形,需要掌握数据分析的基础知识,例如数据类型、数据预处理、统计方法等。同时,还需要了解绘图工具的使用,例如Excel、Tableau、Python中的Matplotlib和Seaborn等。掌握数据可视化的基础知识和工具,可以帮助我们更好地理解数据和数据之间的关系,从而做出更加准确的决策和预测。
179 1
|
JSON 数据可视化 定位技术
可视化 | Python绘制高颜值台风地理轨迹图
可视化 | Python绘制高颜值台风地理轨迹图
|
JavaScript 数据可视化 前端开发
[数据可视化]绘制持仓榜单的“棒棒糖图”
首先对数据进行清洗和处理, pandas读取数据,这里需要去除 000905_SH 列,以及删除全0行。
|
数据可视化
第5章 数据可视化——5.3 三维图形绘制
第5章 数据可视化——5.3 三维图形绘制
|
数据可视化 关系型数据库
第5章 数据可视化——5.2 二维图形绘制(1)
第5章 数据可视化——5.2 二维图形绘制(1)