简单介绍一下ggplot2分类别绘图的三种方式:分组、分面、图形组合;以及长、宽数据如何实现分组绘图

  • 长数据进行分组绘图是比较容易实现的,大部分的R绘图教程都有提到
  • 对于横向数据如何分组绘图,大部分教程提到需先将横向数据转化为纵向数据,然后再进行分组绘图
  • 但其实横向数据也可以直接实现分组绘图,避免了转为纵向数据这一步骤

分类别绘图的三种方式

使用ggplot2绘图时,若需要分类别进行绘图,常见的方式有:

  • 绘制一幅图,按类别进行分组
  • 对每个类别分别绘制一幅图,按类别进行分面
  • 对每个类别分别绘制一幅图,进行图形组合
library(ggplot2)
library(cowplot)
rm(list = ls()) # 清空工作空间!!!

示例数据

使用R自带的mtcars汽车数据集

print(head(mtcars))
#                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
# Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
# Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
# Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
# Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
# Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
# Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1str(mtcars)
# 'data.frame':   32 obs. of  11 variables:
#  $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
#  $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
#  $ disp: num  160 160 108 258 360 ...
#  $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
#  $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
#  $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
#  $ qsec: num  16.5 17 18.6 19.4 17 ...
#  $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
#  $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
#  $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
#  $ carb: num  4 4 1 1 2 1 4 2 2 4 ...

使用vs作为类别变量,将其转化为因子

mtcars$vs <- factor(mtcars$vs)table(mtcars$vs)
#
#  0  1
# 18 14

分组

按照颜色进行分组

ggplot(data = mtcars, aes(x = mpg, y = wt, color = vs)) +geom_point() +geom_smooth(method = "lm") +theme_bw()

分面

ggplot(data = mtcars, aes(x = mpg, y = wt)) +facet_wrap("~ vs") + # 列分面geom_point() +geom_smooth(method = "lm") +theme_bw()

图形组合

cowplot包的plot_grid函数进行图形组合时,可对齐图形边框与坐标轴,参考链接


# 选择vs = 0的样本;注意mtcars$vs为因子,可先转化为字符串再跟0、1比较
p1 <- ggplot(data = mtcars[as.character(mtcars$vs) == "0", ], aes(x = mpg, y = wt)) +geom_point() +geom_smooth(method = "lm") +theme_bw()# 选择vs = 0的样本
p2 <- ggplot(data = mtcars[as.character(mtcars$vs) == "1", ], aes(x = mpg, y = wt)) +geom_point() +geom_smooth(method = "lm") +theme_bw()# 将p1、p2横向组合起来
plot_grid(p1, p2, ncol = 2, align = "vh")

长、宽数据如何分组绘图

  • 长数据进行分组绘图是比较容易实现的,大部分的R绘图教程都有提到
  • 对于横向数据如何分组绘图,大部分教程提到需先将横向数据转化为纵向数据,然后再进行分组绘图
  • 但其实横向数据也可以直接实现分组绘图,避免了转为纵向数据这一步骤

长数据(纵向数据)

data1 <- data.frame(x = c(1, 2, 3, 1, 2, 3), y = c(1, 2, 3, 2, 4, 6), group = factor(c(0, 0, 0, 1, 1, 1)))print(data1)
#   x y group
# 1 1 1     0
# 2 2 2     0
# 3 3 3     0
# 4 1 2     1
# 5 2 4     1
# 6 3 6     1

使用颜色进行分组color = group(使用其他属性如点、线的形状分组与此类似)

ggplot(data = data1, aes(x = x, y = y, color = group)) +geom_point() +geom_line() +theme_bw()

宽数据(横向数据)

data2 <- data.frame(x = c(1, 2, 3), y1 = c(1, 2, 3), y2 = c(2, 4, 6))
print(data2)
#   x y1 y2
# 1 1  1  2
# 2 2  2  4
# 3 3  3  6

使用颜色color进行分组,注意color是写入aes
可以看到,该图与上述长数据绘出的图一模一样

ggplot(data = data2, aes(x = x)) +geom_point(aes(y = y1, color = "0")) +geom_line(aes(y = y1, color = "0")) +geom_point(aes(y = y2, color = "1")) +geom_line(aes(y = y2, color = "1")) +labs(y = "y", color = "group") + # 修改y轴标签和图例名称theme_bw()

R:ggplot2分类别绘图的三种方式以及分组绘图的二种方式相关推荐

  1. mysql远程连接数据库的二种方法_mysql 远程连接数据库的二种方法

    mysql 远程连接数据库的二种方法 一.连接远程数据库: 1.显示密码 如:MySQL 连接远程数据库(192.168.5.116),端口"3306",用户名为"roo ...

  2. mysql远程连接数据库的二种方法_mysql 远程连接数据库的二种方法 | 速光网络博客...

    一.连接远程数据库: 1.显示密码 如:MySQL 连接远程数据库(192.168.5.116),端口"3306",用户名为"root",密码"123 ...

  3. leetcode重点题目分类别记录(三)动态规划深入

    文章目录 动态规划 背包问题 01背包 抽象出求解目标 尝试进程子问题拆分 基本情况 根据拆分过程定义dp数组与转移方程 遍历顺序与状态压缩 模板归纳 题目应用 变种提升 组合问题 多维01背包 有特 ...

  4. 一种发短信验证码,二种发邮件验证码

    前台: <divclass="rightcon bgwhite"> <input type="text"name="bae017&q ...

  5. R语言ggplot2可视化分组变量下的数据分布(线条、色彩配置)、WVPlots包的ShadowHist函数比较分组下的数据直方图、ggplot2分面图facet_wrap可视化分组变量下的数据分布

    R语言ggplot2可视化分组变量下的数据分布(线条.色彩配置).WVPlots包的ShadowHist函数比较分组下的数据直方图.ggplot2分面图facet_wrap可视化分组变量下的数据分布 ...

  6. HTML中怎样把文字分两栏显示,word设置一页分两栏的三种方法

    我们在阅读报纸的时候,经常看到分栏的现象,这就是通过Word当中的"分栏"功能进行设置的,那么下面就由学习啦小编给大家分享下word设置一页分两栏的技巧,希望能帮助到您. word ...

  7. [转] R ggplot2包介绍学习

    原文地址:https://www.cnblogs.com/nxld/p/6059603.html ggplot2绘图特点: 1.核心理念是将绘图与数据分离,数据相关的绘图与数据无关的绘图分离 2.按图 ...

  8. R|ggplot2(五)|scale 修改默认设置

    感谢关注天善智能,走好数据之路↑↑↑ 欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答.求职一站式搞定! 本文作者:天善智能社区专家dwzb 天善智 ...

  9. 魔兽世界模拟器技术之mangos gm命令分类别分组最详细攻略

    不知道各位魔兽世界gm有没有发现一个现象,这段时间游戏中的那些玩家口味越来越刁了.对于服务器版本对于修改对于武器装备,对于游戏平衡对于活动的可玩性之类的越来越高.其中还有很多玩家对于魔兽世界私发服gm ...

最新文章

  1. 互联网协议 — IPv4 互联网协议第 4 版
  2. python之禅中文-Python之禅与翻译之美
  3. Windows常用快捷键汇总
  4. 页面生命周期:DOMContentLoaded, load, beforeunload, unload
  5. ubuntu vim保存退出命令_vim极为详细的教程(一)基本操作
  6. mysql relay log时间_如何得到Slave应用relay-log的时间
  7. 计算机网络基础教程---强烈推荐!来自锐捷官方网站
  8. C语言 | 直接插入排序
  9. [html] 如何在网页中嵌入公司地址的地图?
  10. am335x gpio驱动
  11. PostgreSQL 自定义复合类型(composite type) deform引入的额外开销
  12. CHIL-ORACLE-创建视图
  13. 关于 GBK编码表与编码字库
  14. 毕业设计-基于Springboot实现仓库管理系统
  15. MSM8937的sbl1和CDT
  16. PowerPoint-漂亮表格三招
  17. MSB3644 找不到 .NETFramework,Version=v4.7 的引用程序集。要解决此问题,请为此框架版本安装......
  18. 微信Android客户端后台保活经验分享
  19. VS:如何解决VS2015的30天试用期已过即VS2015许可证已过期的问题
  20. 关于Win10与Ubuntu18.04的装机教程与疑问解答

热门文章

  1. windows10激活出现0xC0000022
  2. 教授专栏49 | 范智勇:基于纳米结构的仿生电子眼
  3. 中兴高管调整:为什么是殷一民?
  4. AlphaGo Zero与增强学习
  5. 如何判定SAP系统是ECC 还是 S4 HANA
  6. 在公司干了16年被辞退,赔偿39万,刚找到新工作,前HR叫回去上班,涨薪7000,但要归还39万!...
  7. GroupingComparator分组(辅助排序)的作用以及GroupingComparator分组案例实操
  8. 2021年危险化学品经营单位安全管理人员免费试题及危险化学品经营单位安全管理人员证考试
  9. Greasy Fork 用户脚本简介
  10. Unity中音乐操作