前往小程序,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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ggplot2优雅绘制阴影填充图
R语言数据分析指南
2024/02/23
2830
ggplot2优雅绘制阴影填充图
ggplot2优雅的绘制全能型箱线图
❝今天又遇到观众老爷提问如何给多组箱线图添加置信区间及P值与R值,想着可能其他朋友也有需求,那么就废话不多说直接开干,还是之前的绘图方案做了一些细微的改动,下面来看具体案例; ❞ 加载R包 library(tidyverse) library(gapminder) library(ggsci) library(ggprism) library(rstatix) library(ggpubr) library(ggpmisc) 数据清洗 df <- gapminder %>% filter(year
R语言数据分析指南
2022/09/21
1.1K0
ggplot2优雅的绘制全能型箱线图
ggplot2优雅的绘制多组配对箱线图
❝有个VIP群里的朋友今天问有没有绘制三组之间配对箱线图的代码,记得小编之前绘制过相关类型的图表,不过既然观众老爷有需求那就废话不多说直接开画;依然是以前的经典风格只不过此次在图上加上了统计分析,下面来看具体案例 加载R包 library(tidyverse) library(gapminder) library(ggsci) library(ggprism) library(rstatix) library(ggpubr) 数据清洗 df <- gapminder %>% filter(year
R语言数据分析指南
2022/09/21
3.7K0
ggplot2优雅的绘制多组配对箱线图
科研绘图神器之Plotluck(如何节省时间)
通常,在统计绘图软件中,我们先确定图片类型(点,线)和所需绘图数据绘制某些类型的图表。在R语言中,许多开发者已经在基础图形之上开发了许多软件包,例如网ggplot2软件包。目前许多的可视化的软件包建立在ggplot2之上。Plotluck的目标是将可视化简单化处理,用户仅指定“(数据和变量关系),然后其他需求(例如,图的类型的选择)软件会自动决定。
用户1359560
2019/07/22
7140
科研绘图神器之Plotluck(如何节省时间)
数据可视化
今天我们来聊一波有趣的数据可视化。 首先,我们先讲一下我们今天要用到的数据。是来自于 http://www.stat.ubc.ca/~rickw/gapminderDataFiveYear.txt 的世界经济数据。 我们打开前6行可以看到以下部分: X head(X) 其中country就是统计的国家啦,year则是统计获得的年份,这份数据采集了1952年到2007年的数据,每五年进行一次统计,pop则是人口的数目,continent代表国家所在的大洲,包括Aisa,Africa,America,Eur
企鹅号小编
2018/01/29
2.5K0
数据可视化
ggplot2轻松绘制误差线点图与箱线图
R语言数据分析指南
2023/08/18
5310
ggplot2轻松绘制误差线点图与箱线图
学好R语言绘图,你只需这样一个网站就够了
话不多说,上网址: https://www.r-graph-gallery.com/ r-garp-gallery收入了大量利用R语言绘制的图形,这些图形包含了很多方面,通过这个网站,我们可以方便直观观察到R语言所能做的一些图形。
不温卜火
2020/10/28
1.4K0
学好R语言绘图,你只需这样一个网站就够了
ggplot2分面图形自定义添加回归曲线R值
❝本节来介绍如何自定义给分面图形添加R值与P值,通过两个案例来进行展示❞ 加载R包 library(tidyverse) library(gapminder) library(ggpmisc) library(ggsci) library(grid) 导入数据 df <- read_tsv("data.xls") %>% filter(!continent %in% c("Oceania","Americas"),year >=1982) 数据可视化 ❝在这个案例中我们介绍使用「stat_quant_e
R语言数据分析指南
2022/12/20
9790
ggplot2分面图形自定义添加回归曲线R值
ggplot2优雅的绘制配对连线云雨图
❝本节来介绍如何使用ggplot2绘制配对连线云雨图,图形倒也简单主要是细节;小编给了两个案例来进行展示,有循环绘图需求的可以看最后一个案例;❞ 加载R包 library(tidyverse) library(ggsignif) library(gghalves) library(ggsci) 数据清洗 df <- read_tsv("data.xls") %>% filter(year %in% c(1957,2007),continent !="Oceania") %>% select(
R语言数据分析指南
2022/12/20
9580
ggplot2优雅的绘制配对连线云雨图
ggplot2如何用简单数据绘制组合图
注:2022版与2023版文档为单独售卖,买任意一年的都可获取2024的文档,「小编只分享案例文档不额外回答问题。」
R语言数据分析指南
2024/05/10
1430
ggplot2如何用简单数据绘制组合图
gganimate|创建可视化动图,让你的表会说话
Hans Rosling的关于“New Insights on Poverty”的TED演讲绝对是对我影响最大的几个TED之一,原来数据可以这样展示,,,可视化可以这样炫,,,故事可以这样讲...
生信补给站
2020/08/06
6960
学会这个BBC,你的图也可以上新闻啦!
英国广播公司(British Broadcasting Corporation;BBC)是全球最大的新闻媒体,其中各类新闻稿件采用的统计图表能很好地传达信息。为了方便清洗可重复数据和绘制图表,BBC数据团队用R对数据进行处理和可视化,经年累月下于去年整理绘图经验并开发了R包-bbplot,帮助我们画出和BBC新闻中一样好看的图形。
生信宝典
2022/04/19
4.3K0
学会这个BBC,你的图也可以上新闻啦!
ggplot2再话箱线图之几何填充
❝VIP群里有观众老爷询问如何对箱线图进行几何形状填充,那么今天就来具体介绍一番;在原有的基础上做了一些小的改动也许恰好您正好有此特殊需求,需要着重体会八个字「变实为虚,变虚为实」,希望对各位观众老爷有所帮助;下面来看具体案例; ❞ 加载R包 library(tidyverse) library(ggsci) library(ggprism) library(rstatix) library(ggpubr) library(ggpmisc) library(ggpattern) 加载数据 gapminde
R语言数据分析指南
2022/09/21
3960
ggplot2再话箱线图之几何填充
动态图可视化:如何、创建具有精美动画图
原文链接:http://tecdat.cn/?p=8003 演示数据集 library(gapminder) head(gapminder) ## # A tibble: 6 x 6 ## cou
拓端
2021/12/16
8800
动态图可视化:如何、创建具有精美动画图
R数据可视化之ggplot2 (一)
学完R语言的基本操作后,我们还可以继续学习R的几大著名而且使用强大的包,今天讲其中的一个,就是ggplot2,至于这个包的评价和地位,我就不多说了,感兴趣可以百度,它绝对是数据可视化的利器,好了,我们先来开始简单介绍一下这个包. 先说说我们人手工作图的方式,1,先画一个坐标轴,2,然后根据数据在图上画图形3,在基础的图形上加一些注释,或加一些对比.基本上这就是我们作图的方式,那么ggplot2就跟这差不多了,1.先设定坐标轴和数据2,选择要画图形的类型3,添加一些图形,4,丰富一下图形的信息.ggpl
小莹莹
2018/04/23
2K0
R数据可视化之ggplot2 (一)
gganimate动画GIF | 让你的图形跳动起来!!!
随着互联网+和大数据科技的发展,VFX可视化和数据可视化越来越受到人们的喜爱,在R语言中,绘制GIF动图主要是在gganimate包中运行,制作视频主要是在av包,gganimate是图形语法的扩展,由ggplot2包实现,它增加了对使用ggplot2用户熟悉的API声明动画的支持
黑妹的小屋
2020/08/06
1.8K0
ggstatsplot绘图|统计+可视化,学术科研神器
ggstatsplot是ggplot2包的扩展包,可以同时输出美观的图片和统计分析结果,对于经常做统计分析或者生信人来说非常有用。
生信补给站
2020/08/06
1.2K0
可视化中你最常用的软件包有哪些?
看到很多答主都给出了全面的回答,包括数据处理,统计建模等方面。而在这篇推文中,我将对自己较为擅长的领域(R语言可视化)进行详细的介绍。
庄闪闪
2021/04/09
1.3K0
R4DS学习记录_ggplot2 - CG
A variable is a quantity, quality, or property that you can measure.
Crazy_George
2024/03/30
2750
ggplot2:计数图(Counts Plot)
前几天发现一个非常有意思的数据可视化小例子https://github.com/nanli-7/basketballdatavisualization,自带数据和代码,非常好的学习材料,自己重复了其中绝大部分内容,但是最后一幅非常漂亮的图没有找到对应的代码,自己也没有思路应该如何入手;今天刷知乎的时候发现了一篇文章 深度好文 |Matplotlib 可视化最有价值的 50 个图表(附完整 Python 源代码), 发现里面有一张图和自己没能画出来的非常像,才知道这类图叫计数图(Counts plot),但是
用户7010445
2020/03/03
1.5K0
相关推荐
ggplot2优雅绘制阴影填充图
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验