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)
image-20201019153317579

控制气泡大小

通过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自行了解。

image-20201019160434074

映射分组颜色

# 输出分组颜色
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)")
image-20201019160642054

进一步美化

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")
image-20201019160735797

交互式气泡图

绘制交互式图形需要用到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  
image-20201019162002611

保存图形

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

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

富集分析气泡图

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

准备数据

image-20201019164956347
  • 第一列: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
image-20201019165509871

分组情况

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

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  
image-20201019165631943
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容