Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >数据处理神器tidyverse(2)ggplot2

数据处理神器tidyverse(2)ggplot2

作者头像
用户1359560
发布于 2019-08-29 02:19:41
发布于 2019-08-29 02:19:41
2.2K00
代码可运行
举报
文章被收录于专栏:生信小驿站生信小驿站
运行总次数:0
代码可运行

数据处理神器tidyverseggplot2

tidyverse包其中包含着一个重要的可视化包---ggplot2。 Ggplot2是由Hadley Wickham制作的数据可视化软件包,它基于一组称为图层的原则。 基本思想是ggplot2将数据的几何对象(圆圈,线条等),主题和比例放在上面。 几何对象的形式由geom_xxx()函数定义,基于数据变量的几何对象的属性(位置,大小,颜色)由美学(aes())函数指定( 在geom_xxx()函数中)。任何ggplot图的基础层都是由ggplot()函数定义的空ggplot层,它描述了用于绘图的数据框。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot(gapminder)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gapminder %>% 
  filter(year == 2007) %>%
  ggplot()

这样输出的是空白图片

添加geom图层

接下来,我将向ggplot对象添加一个“geom”图层。使用+将图层添加到ggplot对象中。可能最常见的geom层是geom_point。 在geom_point()里面,您将指定从变量到所需几何对象的美学映射。 例如,如果你想在x轴上绘制带有gdpPercap的散点图,在y轴上绘制lifeExp,那么你可以添加一个带有相关美学函数的geom_point()几何图层:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# describe the base ggplot object and tell it what data we are interested in along with the aesthetic mapping
gapminder %>%
  filter(year == 2007) %>%
  ggplot() +
  # add a points layer on top
  geom_point(aes(x = gdpPercap, y = lifeExp))

我们还可以使用geom_smooth()在点上添加平滑的趋势线图层。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# describe the base ggplot object and tell it what data we are interested in along with the aesthetic mapping
gapminder %>%
  filter(year == 2007) %>%
  ggplot() +
  # add a points layer on top
  geom_point(aes(x = gdpPercap, y = lifeExp)) +
  # add a smoothed LOESS layer
  geom_smooth(aes(x = gdpPercap, y = lifeExp), method = "loess")
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# describe the base ggplot object and tell it what data we are interested in along with the aesthetic mapping
gapminder %>%
  filter(year == 2007) %>%
  # specify global aesthetic mappings
  ggplot(aes(x = gdpPercap, y = lifeExp)) +
  # add a points layer on top
  geom_point() +
  # add a smoothed LOESS layer
  geom_smooth(method = "loess")

我们还可以将points geom图层与line geom图层或任何其他类型的geom图层组合在一起。 线图适用于绘制时间序列,因此下面我们使用点和线图层绘制平均预期寿命。在这里,你可以通过总结每年的预期寿命并将结果输入ggplot而不必定义任何中间变量来对dplyr操作与ggplot2进行一些巧妙的组合。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gapminder %>%
  # calcualte the average life expectency for each year
  group_by(year) %>%
  summarise(avg_lifeExp = mean(lifeExp)) %>%
  ungroup() %>%
  # specify global aesthetic mappings
  ggplot(aes(x = year, y = avg_lifeExp)) +
  # add a points layer on top
  geom_point() +
  # add a line layer on top
  geom_line()

如果你想在我们每个大陆的地块上有一条单独的线(而不是所有大陆的聚合线),你不需要为每个大陆添加一个单独的层来得到以下图:

相反,当您按年计算平均预期寿命时,首先按“大陆”分组。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gapminder %>%
  group_by(continent, year) %>%
  summarise(avg_lifeExp = mean(lifeExp))

## # A tibble: 60 x 3
## # Groups:   continent [5]
##    continent  year avg_lifeExp
##    <fct>     <int>       <dbl>
##  1 Africa     1952        39.1
##  2 Africa     1957        41.3
##  3 Africa     1962        43.3
##  4 Africa     1967        45.3
##  5 Africa     1972        47.5
##  6 Africa     1977        49.6
##  7 Africa     1982        51.6
##  8 Africa     1987        53.3
##  9 Africa     1992        53.6
## 10 Africa     1997        53.6
## # … with 50 more rows

但是,如果您尝试使用与上面相同的代码在国家/地区年份分组数据框架上绘制一条线,则会得到一个奇怪的锯齿形图案。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gapminder %>%
  group_by(continent, year) %>%
  summarise(avg_lifeExp = mean(lifeExp)) %>%
  ungroup() %>%
  ggplot() +
  # add a points layer on top
  geom_point(aes(x = year, y = avg_lifeExp)) +
  # add a lines layer ontop
  geom_line(aes(x = year, y = avg_lifeExp))

发生这种情况是因为您现在每年都有多个平均预期寿命值,但您没有指定哪些值一起使用。 要修复此图,您需要通过在geom_line()图层的aes()函数中指定group = continent参数来指定行如何组合在一起(即哪个变量定义各行)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gapminder %>%
  group_by(continent, year) %>%
  summarise(avg_lifeExp = mean(lifeExp)) %>%
  ggplot() +
  # add a points layer on top
  geom_point(aes(x = year, y = avg_lifeExp)) +
  # add a lines layer on top that is grouped by continent
  geom_line(aes(x = year, y = avg_lifeExp, group = continent))

image

基于变量的更多美学映射

到目前为止,我们只指定了从数据到geom对象的x和y位置美学映射。 但您也可以指定其他类型的美学映射,例如使用变量来指定点的颜色。如果希望所有点都是相同的颜色,则可以指定全局点颜色参数(位于aes()函数之外)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gapminder %>%
  ggplot() +
  geom_point(aes(x = gdpPercap, y = lifeExp),
             col = "cornflowerblue")

但是,如果您想使用数据框中的变量来定义geoms的颜色(或任何其他美学特征),需要将它包含在aes()函数中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gapminder %>%
  ggplot() +
  geom_point(aes(x = gdpPercap, 
                 y = lifeExp, 
                 col  = continent))

请注意,continent变量本身不指定颜色:这是自动完成的。 您可以通过添加颜色的缩放图层来指定自己想要的颜色。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gapminder %>%
  ggplot() +
  geom_point(aes(x = gdpPercap, 
                 y = lifeExp, 
                 col  = continent)) +
  scale_colour_manual(values = c("orange", "red4", "purple", "darkgreen", "blue"))

我们还可以为其他功能添加美学映射,例如形状,大小,透明度(alpha)等等! 例如,根据人口改变大小:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gapminder %>%
  ggplot() +
  geom_point(aes(x = gdpPercap, y = lifeExp, 
                 col = continent, size = pop),
             alpha = 0.5)

对于上面的线图示例,我们绘制了每个大陆的平均预期寿命时间线,而不是指定“group”参数,您可以将colour参数指定为continent。 这将由continent自动分组和着色。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gapminder %>%
  group_by(continent, year) %>%
  summarise(avg_lifeExp = mean(lifeExp)) %>%
  # specify global aesthetic mappings
  ggplot() +
  # add a points layer on top
  geom_line(aes(x = year, y = avg_lifeExp, colour = continent))

其他类型的图层

到目前为止,我们只看到了散点图(点)和线图,但是,还有许多其他可以添加的geom,包括:

直方图

直方图仅需要指定X轴。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gapminder %>%
  ggplot() + 
  geom_histogram(aes(x = lifeExp), binwidth = 3)

箱图

要为箱形图着色,请使用fill参数而不是col(或color /colour)参数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gapminder %>%
  ggplot() +
  geom_boxplot(aes(x = continent, y = lifeExp, fill = continent))

组合图片

您可以通过添加构面图层来创建由您选择的分类变量(例如“大陆”)分隔的图形的网格(或“构面”)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gapminder %>%
  ggplot() +
  geom_point(aes(x = gdpPercap, y = lifeExp)) +
  facet_wrap(~continent, ncol = 2)

自定义ggplot2

虽然我们在这里保留了默认的ggplot2功能,但是你可以用ggplot2来做很多事情。 例如,通过练习,您将学习如何通过将多个层组合在一起来生成高度自定义的绘图。 作为动机,这里有一个更漂亮的情节可以用ggplot2制作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gapminder %>% 
  filter(year == 2007) %>%
  ggplot() +
  # add scatter points
  geom_point(aes(x = gdpPercap, y = lifeExp, col = continent, size = pop),
             alpha = 0.5) +
  # add some text annotations for the very large countries
  geom_text(aes(x = gdpPercap, y = lifeExp + 3, label = country),
            col = "grey50",
            data = filter(gapminder, year == 2007, pop > 1000000000 | country %in% c("Nigeria", "United States"))) +
  # clean the axes names and breaks
  scale_x_log10(limits = c(200, 60000)) +
  # change labels
  labs(title = "GDP versus life expectancy in 2007",
       x = "GDP per capita (log scale)",
       y = "Life expectancy",
       size = "Population",
       col = "Continent") +
  # change the size scale
  scale_size(range = c(0.1, 10),
             # remove size legend
             guide = "none") +
  # add a nicer theme
  theme_classic() +
  # place legend at top and grey axis lines
  theme(legend.position = "top")
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.08.28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
“i背调”开放API,提供一站式人才背景调查
我们经常听到开发人员讨论API。API与APP一词看上去很相似,对于APP我们很熟悉,即是应用程序Application的缩写,随着智能手机的普及这一词成了手机软件的代称。但是API又是什么呢? 此次
BestSDK
2018/03/01
1.9K0
“i背调”开放API,提供一站式人才背景调查
API经济,正在改变你我生活
对于创业公司来说,如何快速创新,追赶热点,并能切实地完成落地,将新技术与自有业务高效结合。而速度更是决定公司成败的唯一重要特征,比竞争对手更快将新产品推向市场、建立新的全球化风向标,改变现有的流程,发
BestSDK
2018/03/02
1.4K0
API经济,正在改变你我生活
Api -- 连接世界的Super Star
作为互联网从业人员,api 这个词我耳朵都听起茧子了,那么 api 究竟是什么呢?
不吃西红柿
2022/10/05
2680
Api -- 连接世界的Super Star
大数据时代,你的数据属于谁?
在这个所谓的DT(数据科技)时代,数据的价值正在为人所知,由此而来的个人信息泄露事件也层出不穷。然而,当人们将矛头指向黑客入侵系统漏洞、撞库拖库等,却忽略了掌握数据源的互联网企业。 《IT时报》记者在
灯塔大数据
2018/04/09
1.1K0
大数据时代,你的数据属于谁?
2022中国十大API接口服务平台排行榜(推荐五颗星)
Api接口也就是所谓的应用程序接口,api接口的全称是Application Program Interface,通过API接口可以实现计算机软件之间的相互通信,开发人员可以通过API接口程序开发应用程序,可以减少编写无用程序,减轻编程任务,API 同时也是一种中间件,为各种不同平台提供数据共享。根据单个或分布式平台上不同软件应用程序间的数据共享性能。
用户9084242
2023/02/25
9.6K2
2022中国十大API接口服务平台排行榜(推荐五颗星)
1分钟链圈 | 比特币跌破7300美元,刷新一个半月低点!清华x-lab主任毛东辉:链上大学让学生学习更自由
H,艾瑞巴蒂! 这里是 5 月 26 日的每日1句话新闻,只需1分钟,看看全球最热、最新的区块链新闻。 实时币价:BTC $7296.5 ETH $580.21 EOS $12.14(数据来源:
区块链大本营
2018/06/19
4190
大数据共享交易平台:欲练神功,必先自宫!
大数据成为创新经济的引擎,基于大数据的产业异常活跃,各地政府都把大数据当做经济转型的重点,也把大数据作为“弯道取直”,实现后发赶超,获得跨越式发展的机会。于是,很多地方联合企业主导的大数据产业园,大数据交易中心纷纷成立:
IT阅读排行榜
2018/08/15
9840
大数据共享交易平台:欲练神功,必先自宫!
支付宝小程序开放消息中心、行业频道等多个API接口
支付宝小程序近日宣布开放“附近的小程序”、“小程序间跳转”、“消息中心”、“行业频道”等多个API接口,并上线数据助手、截屏提示、自定义用户行为分析等开发者能力。 据了解,这些API接口将于近期正式面
BestSDK
2018/03/02
1.2K0
支付宝小程序开放消息中心、行业频道等多个API接口
不用失去控制权和所有权,也能在区块链中通过数据共享获得奖励?
截止到今年,区块链行业在不断地深入发展,也有一些新的发现与应用场景。不过在一些激励政策方面,到目前为止暂时还没有一种方法来全程跟踪「谁基于什么目的、向谁、何时、共享了什么数据」,进而给予数据所有者相应的激励。
区块链大本营
2019/12/26
5420
不用失去控制权和所有权,也能在区块链中通过数据共享获得奖励?
大数据如何改变一座城市?
“贵阳,坐落于云贵高原的山区之中,不沿海、不沿边,属于欠发达地区。”过去,在关于贵阳的描述中,不难看到这些文字。但从2013年开始,这些描述悄然改变,“大数据之都”、“中国数谷”这些词汇开始高频出现。这座中国西南角落里的城市,正以一种看不见、摸不着的方式,悄然旋转着历史舵盘。这种方式,名为大数据。
钱塘数据
2018/07/27
7790
大数据如何改变一座城市?
大数据解决传统金融信息不对称问题
 和讯银行消息 1月10日,由中国财富管理50人论坛主办第二届年会在北京召开,会议主题为“金融深化改革与财富管理新格局”。和讯网作为独家财经合作媒体对本次论坛进行全程图文报道。中投公司副董事长谢平在大会中表示,互联网金融这个事情在中国做的特别火,主要就是现在很多在实际的经济过程当中金融业解决不了的一些问题,还有整个信息数据化的程度不断的提高,但是现代的模式当中三个问题,一个是信息严重不对称,第二交易成本巨大,第三风险定价非非常复杂,现在这三个问题是造成金融业非常专业,工资非常高,而且风险非常大。 以下
大数据文摘
2018/05/22
1.2K0
数据安全法之下,数据确权有法可依吗?
近日,《中华人民共和国数据安全法》(以下简称“数据安全法”)的出台,引发了国内各界的高度关注。作为我国第一部有关数据安全的专门法律,也是国家安全领域的一部重要法律,将于2021年9月1日起施行。
科技云报道
2022/04/16
3070
数据安全法之下,数据确权有法可依吗?
能源区块链实验室首席架构师曹寅:区块链在金融上的应用场景与前景
数据猿导读 对于区块链在金融业的场景应用与前景,能源区块链实验室首席架构师曹寅认为,金融不仅仅是为社会融通资金、管理风险,其本质是记录交易所有权。 作者 | 曹寅 如今,随着社会不断发展,技术不断进步
数据猿
2018/04/19
1.8K0
能源区块链实验室首席架构师曹寅:区块链在金融上的应用场景与前景
肖风:从这5个方向入手,全方位读懂区块链?
阅读本文前请先思考: 区块链的核心和本质是什么? 去中心化的逻辑是什么? 2018年区块链的发展处于什么阶段?
辉哥
2018/08/10
7410
肖风:从这5个方向入手,全方位读懂区块链?
涂子沛:数据爆炸的时代,数据经济有哪些新“蓝海”?
互联网的上半场已经开创了一个新的商业文明。新经济开始崛起,追其本质则是数据经济。澎湃的数据浪潮正在拍打世界经济和政治,一浪推一浪,人类正在把越来越多的日常生活决策交给数据和算法。那么在走到互联网下半场的今天,数据经济还能否带来新的红利?
大数据文摘
2019/07/18
4080
涂子沛:数据爆炸的时代,数据经济有哪些新“蓝海”?
英国开放银行标准的诞生和前景
作者:英国开放数据研究院 授权:CC-BY-SA国际4.0 译者:王建嘉,谭学垒,赵璇 主编:高丰 ◆ ◆ ◆ 编者按 开放数据并非局限于政府数据的范畴,其概念和精神已被不同行业所拥抱,从而推动行业的变革和新形态的发展。在欧盟新规的推动下,英国的银行业正在完成一次拥抱“开放”的转变:为银行数据开发开放API使得第三方得以访问。本期开放数据前沿专栏就为大家介绍开放银行标准,带领大家了解开放银行数据究竟意味着什么,而其又能如何为银行、银行客户乃至英国数字经济带来怎样的机遇?而看到这样的新变革,我们又能从中获得
大数据文摘
2018/05/24
1.2K0
洗牌期过后,大数据交易将走向何方?丨科技云·视角
2017年,国内大数据行业开始大洗牌,一些公司黯然退场,一些公司却稳步前行。2018年,结束了野蛮时代的大数据行业,在整顿和洗牌中逐渐走向规范,对于安全合规数据的需求却愈发强烈。在此背景下,大数据交易平台再次受到关注。
科技云报道
2022/04/14
6340
低代码为公民开发者打开了API集成的潜力
API存在可访问性问题。低代码API方法能否使它们对公民开发人员更具包容性和可访问性?
增强现实核心技术产业联盟
2021/01/14
5960
区块链如何提高安全性和数据共享?
区块链如何提高安全性和数据共享?在我们采访的第二部分,TCS的Andreas Freund解释道。 你已经听过很多关于区块链的内容,以及它对交易、市场和更多的巨大变化的潜力。但是,这项技术将如何影响你
架构师研究会
2018/07/25
1.5K0
区块链如何提高安全性和数据共享?
百度智能小程序开放申请,这波红利怎么抢?
9月25日,百度宣布其智能小程序开放申请,之前,百度智能小程序一直处于“邀请公测期”,按照百度App业务部总经理平晓黎的说法,两个多月过去其智能小程序已月活过亿,获取用户、留存用户及流量变现效果比较明显。
曾响铃
2018/10/18
6100
百度智能小程序开放申请,这波红利怎么抢?
推荐阅读
相关推荐
“i背调”开放API,提供一站式人才背景调查
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档