Python seaborn 绘制复杂多变量图(hexbin + 拟合直线)
当初作图时想往 sns.pairplot
里加些内容,搜索了解到 sns.PairGrid
可以更灵活地绘制多因素(多变量)关系图,遂在网上找相关教程,最后发现 CSDN 上的内容竟然都要付费,无奈转向 ChatGPT 求助,最后在 C 老师帮助下成功完成了自己的想法。
以上既是这篇文章的来源也是动机,这篇文章就来分享一下如何使用 sns.PairGrid
绘制更加复杂的多变量图,本文示例将是 hexbin
+ 拟合直线,但只要知道如何将图架构起来那么绘制其他类型的图也不会有问题。
sns.pairplot
的详尽用法:
https://seaborn.pydata.org/generated/seaborn.pairplot.html#seaborn-pairplot
一般的多变量图绘制:
1 | import numpy as np |
1 | # 添加一些参数,使对角变成核密度图 |
虽然说这个功能确实非常方便,但是它有个不足就在于其框架已经是设置好的,也就是说图形的变化都只能在已设置好的范围里进行。如果我想要进行其他的操作比如拟合直线或者给每一个图添加相关性标注,这时就只能寻找一个更加 “泛用” 的框架了。
sns.PairGrid
就是理想之选,它允许我们自定义绘图参数并应用于对角线下、对角线和对角线上的部分,因此假如这里我们想要拟合直线,那么可以自定义绘图函数:
1 | from scipy.stats import spearmanr |
自定义好函数以后,使用 sns.PairGrid
进行构造:
1 | # 传入数据 |
能看到每一部分的图都依据自己定义或选择的绘图函数进行了绘制,可以看出在绘制多变量图时 sns.PairGrid
比 sns.pairplot
会更加灵活,上限也能拉的更高。
课后问题(bushi):
- 如何使用相对坐标放置标签(
ax.text
)?相较于绝对坐标使用相对坐标的好处是什么? - hexbin plot 中如何让没有数据点的位置不进行着色?如何让着色根据数据点数量的
log
值进行? - 如何将
spearman r
换成pearson r
?两者有什么区别?文中的数据更适用于哪个(亦或是都适用)?
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Juse's Blog!
评论