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月前
|
数据可视化 数据挖掘 图形学
R语言基础可视化:使用ggplot2构建精美图形的探索
【8月更文挑战第29天】 `ggplot2`是R语言中一个非常强大的图形构建工具,它基于图形语法提供了一种灵活且直观的方式来创建各种统计图形。通过掌握`ggplot2`的基本用法和美化技巧,你可以轻松地将复杂的数据转化为直观易懂的图形,从而更好地理解和展示你的数据分析结果。希望本文能够为你探索`ggplot2`的世界提供一些帮助和启发。
|
6月前
|
Python
`matplotlib`是Python中一个非常流行的绘图库,它提供了丰富的绘图接口,包括二维和三维图形的绘制。`Axes3D`是`matplotlib`中用于创建三维坐标轴的对象,而`plot_surface`则是用于在三维空间中绘制表面的函数。
`matplotlib`是Python中一个非常流行的绘图库,它提供了丰富的绘图接口,包括二维和三维图形的绘制。`Axes3D`是`matplotlib`中用于创建三维坐标轴的对象,而`plot_surface`则是用于在三维空间中绘制表面的函数。
|
数据格式
如何绘制热图?ggplot2入门笔记
如何绘制热图?ggplot2入门笔记
|
JSON 数据可视化 定位技术
可视化 | Python绘制高颜值台风地理轨迹图
可视化 | Python绘制高颜值台风地理轨迹图
|
数据可视化
ggplot2|详解八大基本绘图要素(一)
ggplot2|详解八大基本绘图要素
101 0
|
自然语言处理 数据可视化 算法
第5章 数据可视化——5.2 二维图形绘制(3)
第5章 数据可视化——5.2 二维图形绘制(3)
|
数据可视化 关系型数据库
第5章 数据可视化——5.2 二维图形绘制(1)
第5章 数据可视化——5.2 二维图形绘制(1)
|
编解码 数据可视化 数据挖掘
R语言之 ggplot 2 和其他图形
R语言之 ggplot 2 和其他图形
111 0
|
数据可视化 数据挖掘 Linux
数据可视化丨优雅的绘制带显著性标记的箱线散点图,主要使用ggsignif和ggplot2
数据可视化丨优雅的绘制带显著性标记的箱线散点图,主要使用ggsignif和ggplot2