各位数据民工注意了(敲黑板)!今天要隆重介绍一个拯救秃头程序员的利器——Seaborn!这个基于Matplotlib的统计绘图库,简直就是数据分析师的时尚造型师。还记得当年被Matplotlib原生样式丑到怀疑人生的日子吗?(别装了,你肯定偷偷把默认颜色改成#4B0082过!)
举个血泪例子:之前用Matplotlib画箱线图要写10行代码,现在Seaborn只需要:
sns.boxplot(x='day', y='total_bill', data=tips)
pip install seaborn
# 或者用conda的大佬
conda install -c conda-forge seaborn
(重要的事情说三遍!)Matplotlib是必须的!Matplotlib是必须的!Matplotlib是必须的!虽然Seaborn基于它,但有些环境下可能要单独安装:
pip install matplotlib numpy pandas
import seaborn as sns
tips = sns.load_dataset("tips")
# 魔法开始!
sns.scatterplot(x="total_bill", y="tip",
hue="time", style="sex",
size="size", data=tips)
这个看似简单的散点图其实暗藏玄机:
sns.displot(data=tips, x="total_bill", col="time",
kde=True, height=5, aspect=0.8)
输出结果会自动分成午餐和晚餐两个子图,每个都带密度曲线!这种分面(facet)功能,Matplotlib得写半天循环…
# 查看所有调色板
print(sns.palettes.SEABORN_PALETTES)
# 使用cubehelix渐变
sns.color_palette("ch:s=.25,rot=-.25", as_cmap=True)
推荐几个私藏配色:
sns.set_theme(style="whitegrid", # 白底网格
palette="pastel", # 马卡龙色系
font="SimHei", # 中文支持
rc={'figure.figsize':(12,8)})
g = sns.PairGrid(tips, hue="time")
g.map_upper(sns.scatterplot)
g.map_lower(sns.kdeplot)
g.map_diag(sns.histplot)
g.add_legend()
对角线放直方图,上半部分散点图,下半部分密度图——这才是探索数据关系的正确姿势!
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # Windows
plt.rcParams['font.sans-serif'] = ['Songti SC'] # Mac
导出时加上这两个参数:
plt.savefig("output.png", dpi=300, bbox_inches='tight')
所有绘图函数都要传相同的hue
参数,或者用palette
参数指定具体颜色列表
Q:和Matplotlib到底什么关系?
A:就像美颜相机和单反的关系!Seaborn是高级封装,Matplotlib是底层引擎
Q:能自定义样式吗?
A:当然!用sns.set_style()选darkgrid/whitegrid/dark/white/ticks,还能用plt.style.use(‘ggplot’)调用其他主题
Q:3D绘图支持吗?
A:官方不支持(这是统计绘图库),但可以配合mpl_toolkits实现
用Seaborn画图真的爽到飞起(特别是配色苦手的同学)!自从用了它,我的分析报告从乡镇PPT升级成了苹果发布会。悄悄说个骚操作:先用Seaborn画基础图,再用Matplotlib微调细节,效率颜值两不误!
最后送大家一句Seaborn哲学:如果一个图需要超过5句代码,那肯定有更优雅的写法!(来自被Matplotlib折磨过的每一个深夜)