引言
前几天看到群里读者朋友的提问,发现很多同学对作图仅局限于就图论图,今天就简单整理一下公众号发布过的「以散点为主体」的相关图形,简单归纳一下其内在逻辑联系。
几种常用散点图
1、普通散点图
![95a90304686e2489d87b445973885c08.png](https://img-blog.csdnimg.cn/img_convert/95a90304686e2489d87b445973885c08.png)
![5bca3f7358349672d036d7b4b86c927b.png](https://img-blog.csdnimg.cn/img_convert/5bca3f7358349672d036d7b4b86c927b.png)
![752d4cececa2b2fc7cae6101e66e2be0.png](https://img-blog.csdnimg.cn/img_convert/752d4cececa2b2fc7cae6101e66e2be0.png)
2、各种火山图或多象限散点图
![cec03be97a904d8571b1fa0218e75ee0.png](https://img-blog.csdnimg.cn/img_convert/cec03be97a904d8571b1fa0218e75ee0.png)
![70264aeb54a2801be3e3b3df8a6f2548.png](https://img-blog.csdnimg.cn/img_convert/70264aeb54a2801be3e3b3df8a6f2548.png)
3、气泡散点图
![726a0df0e2cb4954f548db3c933bb41a.png](https://img-blog.csdnimg.cn/img_convert/726a0df0e2cb4954f548db3c933bb41a.png)
![21465d5edd0b6bfed8bb9df8d82659ea.png](https://img-blog.csdnimg.cn/img_convert/21465d5edd0b6bfed8bb9df8d82659ea.png)
示例数据和代码领取
木舟笔记永久VIP企划
「权益:」
「木舟笔记所有推文示例数据及代码(「在VIP群里」实时更新」)。
data+code 木舟笔记「科研交流群」。
「收费:」
「169¥/人」。可添加微信:mzbj0002
转账(或扫描下方二维码),或直接在文末打赏。木舟笔记「2022VIP」可直接支付「70¥」升级。
❝❞
点赞
、在看
本文,分享至朋友圈集赞30个
并保留30分钟
,可优惠20¥
。
普通散点图
此类散点图以「散点」+不同散点「形状」、「大小」、「颜色映射」为主。
「普通散点图+拟合曲线」
「散点」+不同散点「形状」、「颜色映射」
![22fdf7b17f7c1642286b74cbb8198f29.png](https://img-blog.csdnimg.cn/img_convert/22fdf7b17f7c1642286b74cbb8198f29.png)
「详细教程」:R绘图 | 气泡散点图+拟合曲线
「核心代码:」
ggplot(plot_df,
aes(x = log10(mean_gdp_per_capita),
y = mean_access_perc)) + # 点的位置,即(x, y)
geom_point(data = plot_df,
aes(size = mean_death_perc, # 点的大小映射
fill = continent), # 点的填充颜色映射
pch = 21) +
geom_smooth(method = "loess") # 添加平滑曲线拟合
「PCoA/UMAP/TSNE/PCA」
「散点」+不同散点「颜色映射」
![bb6d468ecf70c743a987610ab3b0b420.png](https://img-blog.csdnimg.cn/img_convert/bb6d468ecf70c743a987610ab3b0b420.png)
「详细教程」:跟着 Cell 学作图 | 主坐标分析(PCoA)及其可视化(vegan)
「核心代码:」
ggplot(data = plot_data,
aes(x=PCoA1,
y=PCoA2, # 点的位置,即(x, y)
fill=group)) + # 点的填充颜色映射 数据集相同可以放ggplot()里或geom_point()里
geom_point(shape = 21, # 散点类型(21为带边框的散点,即fill和color分别代表填充颜色和边框颜色)
color = 'black', # 散点边框颜色
size=4) + # 散点大小
scale_fill_manual(values = c('#73bbaf','#d15b64','#592c93')) # fill颜色设置
「进阶散点图」
「散点」+不同散点「颜色、大小映射」
![5d5338d720c639dbd02da23356b59af6.png](https://img-blog.csdnimg.cn/img_convert/5d5338d720c639dbd02da23356b59af6.png)
此图为群友提问,没有写过,这里简单写一下。
「完整代码:」
## 示例数据
dt <- data.frame(item = paste0('item',1:200),
NES = runif(200,0,2),
FDR = runif(200,0,0.1),
ZSCORE = runif(200,0,6),
P = runif(200,0,0.1))
ggplot(data = dt,
aes(x=ZSCORE,
y=NES, # 点的位置,即(x, y)
size = -log10(FDR), # 点的大小映射
color=-log10(P))) + # 点的颜色映射
geom_point() +
scale_color_gradient(low = '#e2d89b',high = '#811919') + # color渐变颜色设置
geom_hline(yintercept = 1.3,linetype = 'dashed', col = '#c0c0c0')+ # 横线
geom_vline(xintercept = 2,linetype = 'dashed', col = '#c0c0c0')+ # 竖线
geom_text_repel(
data = dt[dt$ZSCORE>4&dt$NES>1.5,],
aes(label = item),
size = 4.5,
color = "black",
segment.color = "black", show.legend = FALSE )+ #添加关注的点的名称
theme_few()
ggsave('sactter_eg1.pdf',width = 6,height = 5)
![d297ffed7074f77604be1fc74b5442e5.png](https://img-blog.csdnimg.cn/img_convert/d297ffed7074f77604be1fc74b5442e5.png)
各种火山图或多象限散点图
「火山图」
「散点」+不同散点「形状」、「颜色映射」
火山图的本质也是一样的,但是由于原始数据没有对散点进行分类(即上下调),需增加一步数据处理。
![37f1fd06be9e0553ae291c447ae8acd9.png](https://img-blog.csdnimg.cn/img_convert/37f1fd06be9e0553ae291c447ae8acd9.png)
「详细教程」:跟着 Cell 学作图 | 火山图进阶版
「核心代码:」
# 确定是上调还是下调,用于给图中点上色
# 阈值自行确定
df$threshold = factor(ifelse(df$P_value < 0.05 & abs(df$fd) >= 0.25,
ifelse(df$fd >= 0.25 ,'Up','Down'),'NoSignifi'),
levels=c('Up','Down','NoSignifi'))
ggplot(df,
aes(x=fd,y= -log10(P_value),# 点的位置,即(x, y)
size = logCPM, # 点的大小映射
fill = threshold))+ # 点的填充映射
geom_point(colour = "black", shape = 21, stroke = 0.5)+
scale_size(limits = c(2, 16))+ #控制最大气泡和最小气泡,调节气泡相对大小
scale_fill_manual(values=c("#fe0000","#13fc00","#bdbdbd"))+ #确定点的颜色
geom_vline(xintercept=c(-0.25,0.25),lty=2,col="black",lwd=0.5) + #添加横线|logFoldChange|>0.25
geom_hline(yintercept = -log10(0.05),lty=2,col="black",lwd=0.5) #添加竖线padj<0.05
「多象限散点图」
「散点」+不同散点「颜色映射」
同样由于原始数据没有对散点进行分类(四分类或就分类),需增加一步数据处理。
![f4684ee40e93ac6750e7aa9ab6a0435b.png](https://img-blog.csdnimg.cn/img_convert/f4684ee40e93ac6750e7aa9ab6a0435b.png)
「详细教程」:跟着Nucleic Acids Research学作图 -- 多组学九象限散点图
❝此教程来源公众号【生信师兄】。
❞
「核心代码:」
# 分组处理:设置阈值,以正负log10(2)为阈值:
group <- ifelse((abs(data[,1]) > log10(2) & abs(data[,2]) > log10(2))|(abs(data[,1]) < -log10(2) & abs(data[,2]) < -log10(2)),
"mRNA+RPF_both", ifelse(
(data[,1] > log10(2) & data[,2] < log10(2) & data[,2] > -log10(2))|(data[,1] < -log10(2) & data[,2] < log10(2) & data[,2] > -log10(2)),
"mRNA_only", ifelse(
(data[,2] > log10(2) & data[,1] < log10(2) & data[,1] > -log10(2))|(data[,2] < -log10(2) & data[,1] < log10(2) & data[,1] > -log10(2)),
"RPF_only", NA)))
p + geom_point(data=data, aes(mRNA_FC, RPF_FC, color = group))+
scale_color_manual(values = c("mRNA+RPF_both" = "#dd8653",
"mRNA_only" = "#59a5d7",
"RPF_only" = "#aa65a4",
"#878787"),
breaks = c("mRNA+RPF_both","mRNA_only","RPF_only"))
气泡散点图
「气泡热图」
「散点」+不同散点「大小」、「颜色映射」
气泡热图也是一样,只是散点的「坐标」不是「数字」而是'名称'。
![7b154d913d1b28ed3772c7704cb13fec.png](https://img-blog.csdnimg.cn/img_convert/7b154d913d1b28ed3772c7704cb13fec.png)
「详细教程」:这图怎么画| 气泡热图(基因表达泛癌分析)
「核心代码:」
ggplot(data,aes(x=type ,y= gene)) + # 点的位置,即(x, y) 注意此时皆不是数值变量
geom_point(aes(size=-log10(pvalue), fill=Log2FC),
shape=21,
color="black") + # 需要的映射
scale_fill_gradient2(name = 'Log2FC\n(Expression)', # 色阶图例名称
limit = c(-1.001,1.001), # 色阶图例范围
breaks = c(-1.0,-0.5,0.0,0.5,1.0), # 色阶图例间距
low='#444283', # 颜色设置
high='#943934',
mid="white",
midpoint = 0)+ # 中间颜色对应值
scale_size_continuous(name = '-Log10 qvalue', # 大小图例名称
limit = c(-0.001,3.1), # 大小图例范围
breaks = c(0,1,2,3))+# 大小图例间距
geom_hline(yintercept=c(5.5, 10.5))
「相关型热图」
「散点」+不同散点「大小映射」
同样,该类型的散点的「坐标」不是「数字」而是'名称'。
当然,此图的散点并不是主体,颜色的映射由方块完成。
![ac3937b8def3e1422faf79d04e269650.png](https://img-blog.csdnimg.cn/img_convert/ac3937b8def3e1422faf79d04e269650.png)
「详细教程」:这图怎么画| 相关性热图+柱状图
「核心代码:」
ggplot()+
geom_tile(data = df_cor_long,
mapping = aes(sample,indicator,fill = value))+ # 方块填充颜色映射
scale_fill_gradient2(name = 'Correlation',
limit = c(-1.001,1.001),
breaks = c(-1.0,-0.5,0.0,0.5,1.0),
low = '#2ab49b',
mid = 'white',
high = '#ea7f58')+
geom_point(data = df_imp_long,
mapping = aes(sample,indicator,size = value), # 散点大小映射
shape = 1,
stroke = 0.6,
color = 'black')+
scale_size_continuous(name = 'Importance(%)',
limit = c(-0.001,15.1),
breaks = c(0,5,10,15))
总结
以上就是我根据【木舟笔记】公众号的「历史推文」以及「读者提问」整理的一些散点图及其变体的作图逻辑。当然图形的表达方式千变万化,本人也是才薄智浅不可能巨细无遗。这里我就抛砖引玉一下,欢迎各位读者朋友补充完善。
往期内容
![acedfb0bead7bf1882f1a1e958d85bc3.png](https://img-blog.csdnimg.cn/img_convert/acedfb0bead7bf1882f1a1e958d85bc3.png)