可视化:bubble

  今天继续分享生信分析中常见的图形 -- bubble。与散点图相比,气泡图在点的大小上面增加了一个维度的信息,属于一种特别的散点图。如果再结合plotlyhtmlwidgets包生成交互式的气泡图,那么能够呈现的信息就会更多。

示例数据

  下面绘图使用的数据集 gapminder 来自 R 包gapminder ,如果安装了该包可以直接使用,没有安装的话可以直接从github上下载:https://github.com/jennybc/gapminder/blob/main/data/gapminder.rdata。本人还是直接下载数据来使用了。

load('gapminder.rdata')
data <- gapminder[gapminder$year==2007,]
data$gdpPercap <- round(data$gdpPercap,0)
data$pop <- round(data$pop/1000000,2)
data$lifeExp <- round(data$lifeExp,1)
data$text <-  paste("Country: ", data$country, "\nPopulation (M): ", data$pop, "\nLife Expectancy: ", data$lifeExp, "\nGdp per capita: ", data$gdpPercap, sep="")
head(data)
# A tibble: 6 × 7
#  country     continent  year lifeExp   pop gdpPercap text
#  <fct>       <fct>     <int>   <dbl> <dbl>     <dbl> <chr>
#1 Afghanistan Asia       2007    43.8  31.9       975 "Country: Afghanistan\nPo…
#2 Albania     Europe     2007    76.4   3.6      5937 "Country: Albania\nPopula…
#3 Algeria     Africa     2007    72.3  33.3      6223 "Country: Algeria\nPopula…
#4 Angola      Africa     2007    42.7  12.4      4797 "Country: Angola\nPopulat…
#5 Argentina   Americas   2007    75.3  40.3     12779 "Country: Argentina\nPopu…
#6 Australia   Oceania    2007    81.2  20.4     34435 "Country: Australia\nPopu…

  选取数据集中2007年的数据绘图,并对其中的数据小数保留精度做了一些调整。其中pop转化为百万单位(M),并增加一列包含CountryPopulationLife ExpectancyGdp per capita信息,用于后面绘制交互式气泡图。

绘图

  废话不多说,基础气泡图绘制代码如下:

library(ggplot2)
library(viridis)

p <- ggplot(data, 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) +
           theme_minimal() +
           theme(legend.position="none")
p

结果如下:

  绘图过程还是挺简单的,颜色美化依旧使用的是viridis包的配色方案。气泡默认会根据数据的大小映射为不同的大小,但有时候默认映射不符合审美时,我们可以使用scale_size函数来调整气泡的大小。

交互

  将上面绘图的基础气泡图,变成交互式的动图,代码如下:

library(plotly)
library(htmlwidgets)

pp <- ggplotly(p, tooltip="text", height=5, width=7)
saveWidget(pp, file="ggplotlyBubble.html")

结果如下:

  基础气泡图变成交互式气泡图后,鼠标移动到气泡上面时就会呈现出相应的信息(前面增加的一列信息)。交互式的图显然增加了展示的信息量,但其使用场景有所限制,多见于网页里面。


往期绘图

可视化:scatterplot
可视化:barplot
可视化:泡泡图
可视化:小提琴图
可视化:分组环状条形图

推荐阅读更多精彩内容