R可视化学习(7) -- 气泡图

简介: 气泡图

气泡图


R包准备

# R包准备
library(ggplot2)
library(dplyr)
# 
library(gapminder)

数据预处理

我们用到gapminder包中的gapminder数据集,该数据集储存了关于各国预期寿命、人均GDP和人口的数据。先看下数据结构

> head(gapminder,5)
# A tibble: 5 x 6
  country     continent  year lifeExp      pop gdpPercap
  <fct>       <fct>     <int>   <dbl>    <int>     <dbl>
1 Afghanistan Asia       1952    28.8  8425333      779.
2 Afghanistan Asia       1957    30.3  9240934      821.
3 Afghanistan Asia       1962    32.0 10267083      853.
4 Afghanistan Asia       1967    34.0 11537966      836.
5 Afghanistan Asia       1972    36.1 13079460      740.
# 只选取2007年的数据
data <- gapminder %>% filter(year=="2007") %>% dplyr::select(-year)

基础气泡图

# geom_point()函数
ggplot(data, aes(x=gdpPercap, y=lifeExp, size = pop)) +geom_point(alpha=0.7)

16d231fc451e39f6b3db409e2a7ab3b.png

控制气泡大小

通过scale_size()函数中range参数设置最小和最大气泡的范围,且通过name参数可以自定义图例的名字

注意:圆圈经常重叠。为了避免在图表顶部出现大圆圈,您必须首先重新排序您的数据集。代码如下:

data %>%
  arrange(desc(pop)) %>% # 按pop列降序
  mutate(country = factor(country, country)) %>% #设置为因子格式 
  ggplot(aes(x=gdpPercap, y=lifeExp, size = pop)) +
  geom_point(alpha=0.5) +
  scale_size_area(range = c(.1, 24), name="Population (M)")

另外将数值变量映射到圆的大小的还有scale_radiusscale_size函数,可以?scale_radius自行了解。

b3739ad4987b02d81297b74b578772c.png

映射分组颜色

# 输出分组颜色
data %>%
  arrange(desc(pop)) %>%
  mutate(country = factor(country, country)) %>%
  ggplot(aes(x=gdpPercap, y=lifeExp, size=pop, color=continent)) +
    geom_point(alpha=0.5) +
    scale_size(range = c(.1, 24), name="Population (M)")

0ab3d9a9df01d0d829f4940c48fe460.png

进一步美化

data %>%
  arrange(desc(pop)) %>%
  mutate(country = factor(country, country)) %>%
  ggplot(aes(x=gdpPercap, y=lifeExp, size=pop, fill=continent)) +
    geom_point(alpha=0.5, shape=21, color="black") +
    scale_size(range = c(.1, 24), name="Population (M)") +
    scale_fill_viridis(discrete=TRUE, guide=FALSE, option="A") +
    theme_ipsum() +
    theme(legend.position="bottom") +
    ylab("Life Expectancy") +
    xlab("Gdp per Capita") +
    theme(legend.position = "none")

f7697ca8e22f3334daccb8c4019f907.png

交互式气泡图


绘制交互式图形需要用到plotly包,我们还是利用上面的数据集来进行绘制。

R包准备

# 加载
library(ggplot2)
library(dplyr)
library(plotly)
library(viridis)
library(hrbrthemes) 
# 还是利用上面数据集
library(gapminder)
data <- gapminder %>% filter(year=="2007") %>% dplyr::select(-year)

数据预处理

利用dplyr包来管道操作清洗数据,

newdata <- data %>%
  mutate(gdpPercap=round(gdpPercap,0)) %>% # 四舍五入取整
  mutate(pop=round(pop/1000000,2)) %>% # 保留俩位小数
  mutate(lifeExp=round(lifeExp,1)) %>% # 保留俩位小数
  # Reorder countries to having big bubbles on top
  arrange(desc(pop)) %>%
  mutate(country = factor(country, country)) %>%
  # prepare text for tooltip
  mutate(text = paste("Country: ", country, "\nPopulation (M): ", pop, "\nLife Expectancy: ", lifeExp, "\nGdp per capita: ", gdpPercap, sep=""))  #增加每个气泡标签

绘制图形

plot <- ggplot(newdata, aes(x=gdpPercap, y=lifeExp, size = pop, color = continent, text=text)) +
  geom_point(alpha=0.7) +
  scale_size(range = c(1.4, 19), name="Population (M)") +
  scale_color_viridis(discrete=TRUE, guide=FALSE) +
  theme_ipsum() +
  theme(legend.position="none")
  pp

976834644a5c9dfb4803942cb14af8b.png

保存图形

# 1. 先将ggplot图形转换为交互式图形
pp <- ggplotly(plot, tooltip="text")
pp
# 利用saveWidget函数保存交互式图形
library(htmlwidgets)
saveWidget(pp, file=  "./ggplotlyBubblechart.html")

1e4d6e0584177297a8aab35b8125dec.png

打开我们保存的html文件,可以看道鼠标停留在每个气泡上就会显示出我们添加的标签内容了,而且通过右上角的按钮可以进行拍照保存png格式图形、调整交互图形大小等功能。

富集分析气泡图


气泡图的本质就是散点图,通过数据集中的离散/连续变量等去映射气泡大小颜色产生各种气泡图,懂得了这个道理,我们再来动手绘制下转录组中常见的富集气泡图练习一下吧~~

准备数据

40ef169add2612ed26d6982155ade82.png

  • 第一列:pathway名称
  • 第二列:富集基因比例
  • 第三列:Qvalue
  • 第四列:基因数量

绘制图形

pathway <- read.delim('KEGG_pathway.txt',check.names = FALSE,header = T,sep = '\t')
p <- ggplot(pathway,aes(GeneRatio,Description))+geom_point(aes(size = Count,color = -1*log10(qvalue)))+
  scale_color_gradient(low = "green",high = 'red')+
  scale_size(range = c(1.4, 19), name="Gene")+
  labs(color = expression(-log[10](qvalue)),size = 'Gene',
       x = 'GeneRatio',
       y = 'Pathway')+
  theme(panel.grid = element_blank(), panel.background = element_rect(fill = 'transparent', color = 'black'),legend.key = element_blank())
p

e37adfa55c202a7af07aa75eed6cb6c.png

分组情况

当我们有多样品时候,也可以添加一列样品信息,然后将图中的横坐标改变为每个样品进行绘图

pathway <- pathway %>% mutate(type = c(rep('D',15),rep('H',16))) # 添加一列样品类型
# 绘制图形
p <- ggplot(pathway,aes(type,Description))+geom_point(aes(size = Count,color = -1*log10(qvalue)))+
  scale_color_gradient(low = "green",high = 'red')+
  scale_size(range = c(1.4, 19), name="Gene")+
  labs(color = expression(-log[10](qvalue)),size = 'Gene',
       x = 'Type',
       y = 'Pathway')+
  theme(panel.grid = element_blank(), panel.background = element_rect(fill = 'transparent', color = 'black'),legend.key = element_blank())
p

9447c8df376a7e1e6154d8c01545975.png

相关文章
|
XML 编解码 编译器
Unity跨平台UI解决方案:可能是最全的FairyGUI系列教程-第八天
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!
2517 0
|
10月前
|
人工智能 自然语言处理 前端开发
《10分钟开发电商页!CodeBuddy自然语言转代码实测:程序员效率革命》
CodeBuddy AI编程助手,实现自然语言到代码全流程生成,支持React开发、Figma转代码,提升效率,限时抽奖送体验码!
|
传感器 人工智能 边缘计算
AI赋能油田巡检——无人机视频监控系统的技术解析
无人机油田巡检系统融合无人机硬件与AI视频监控技术,实现全域覆盖、智能分析和高效管理。通过多旋翼/固定翼无人机搭载高分辨率摄像头及传感器,采集多维数据;结合YOLOv9等算法进行异常检测,准确率高达98%。系统支持5G实时传输、边缘计算及集中化管理平台,提供可视化监控与预测性维护。基于开源框架设计,灵活扩展且成本低,大幅提升油田巡检效率与安全性。
1266 0
|
安全 搜索推荐 数据可视化
提升游戏APP留存与付费:高性价比工具与实践
2024年中国移动游戏市场收入达2843.3亿元,头部产品占据超七成份额。在存量市场竞争中,留住用户成为关键。Xinstall推出三大工具:Deeplink实现无缝跳转提升转化;安全加速优化启动体验;分享统计助力社交裂变,以低成本助力开发者提升留存与付费转化率。
420 3
|
12月前
|
XML JSON 监控
1688商品列表API接口全解析:从关键词搜索到分页处理方案
1688商品列表数据接口用于获取1688平台商品信息,支持关键词、价格区间、销量范围及类目等条件筛选,返回标题、价格、销量等基本信息。接口采用HTTP/GET或POST请求,响应格式为JSON或XML。主要功能包括商品信息获取、筛选与排序、分页查询及店铺商品获取。调用时需构造参数(如app_key、sign等),并处理返回数据。常用参数有搜索关键词(q)、页码(page)、每页数量(pageSize)、价格区间(priceStart/priceEnd)和类目ID(categoryId)。适用于商家数据分析与运营优化。
|
机器学习/深度学习 人工智能 自然语言处理
自然语言处理
【10月更文挑战第16天】
|
搜索推荐 算法 数据可视化
深入解析冒泡排序算法
深入解析冒泡排序算法
341 5
|
监控 Linux
linux之grep详解
linux之grep详解
|
并行计算 异构计算
建立Hugging Face模型调用环境
本文介绍了如何在环境中导入transformers库,并从Hugging Face网站下载模型。如果使用镜像网站,需获取access token。部分模型需申请仓库权限,建议使用国外信息填写。有GPU的用户需先配置CUDA和pytorch-gpu。
|
Shell Python
python中模块对象__file__
【6月更文挑战第12天】
439 8

热门文章

最新文章