📊 用 Seaborn 做图,比点外卖还简单?Python 数据可视化真香指南!
你是不是也经历过这样的崩溃时刻?
- 用 Matplotlib 画个图,调颜色调到眼瞎;
- 最后做出来的图,看起来像上世纪90年代的PPT……
别慌!今天带你认识一位 Python 可视化界的“高颜值暖男”——Seaborn。
它不光长得好看(默认配色高级感拉满),脾气还好(API 简洁易懂),关键是——它能让你的数据讲出故事!
🎨 1. Seaborn 是啥?Matplotlib 的“美颜滤镜”!
Seaborn 并不是要取代 Matplotlib,而是给它套了个“高定西装”。你可以把它理解为 Matplotlib 的高级封装,专治各种“丑图焦虑”。
import seaborn as sns
对,就这一行,你就已经站在了时尚前沿 👗
❝💡 生活类比:Matplotlib 是素颜,Seaborn 是开了“原相机+柔光+磨皮”的你。
🖌️ 2. 风格设置:5种主题,总有一款适合你
Seaborn 提供了5种预设主题:
sns.set_style("whitegrid")
想临时换个风格?用 with 语句,就像试穿衣服,不买也行:
with sns.axes_style("darkgrid"): plt.plot([1, 2, 3], [4, 5, 6])# 出了这个 with,风格自动恢复!
❝💡 小技巧:sns.despine() 可以“去边框”,比如去掉右边和上边的轴线,让图更干净:
sns.despine(left=True, bottom=True) # 连左边和底边都不要了!极简到骨子里
🔍 3. 字体与缩放:从论文到海报,一键切换
Seaborn 还贴心地考虑了你的使用场景,提供4种上下文模式:
sns.set_context("poster", font_scale=1.5)
❝💡 类比:这就像是把手机字体从“正常”调成“爷爷模式”——看得清,才安心!
📈 4. 直方图 + 密度图:看清数据的“身材”
想知道某列数据是“瘦高型”还是“矮胖型”?用 distplot(旧版)或 histplot/kdeplot(新版):
sns.distplot(df_iris['Petal.Width'], kde=True, rug=True)
rug=True:在底部加“毛毯线”,显示每个数据点位置
❝💡 生活例子:这就像体检时不仅看平均身高,还看身高分布——班上有没有几个“姚明”?
🌸 5. 散点图三剑客:stripplot、swarmplot、pairplot
✅ stripplot:基础散点,但可能重叠
sns.stripplot(x='Species', y='Petal.Width', data=df_iris)
✅ 加 jitter=True:抖一抖,避免重叠
sns.stripplot(x='Species', y='Petal.Width', data=df_iris, jitter=True)
✅ swarmplot:智能排布,绝不重叠!
sns.swarmplot(x='Species', y='Petal.Width', data=df_iris)
❝💡 类比:stripplot 像地铁早高峰挤成一团;swarmplot 则是大家自觉排队,人人有座!
✅ pairplot:一键生成“相亲角”矩阵图
sns.pairplot(df_iris, hue='Species')
所有变量两两对比,还能按类别上色——找相关性神器!
📦 6. 箱线图 & 小提琴图:数据分布的“体检报告”
📦 箱线图(boxplot):看中位数、四分位、异常值
sns.boxplot(x='Species', y='Petal.Width', data=df_iris)
🎻 小提琴图(violinplot):箱线图 + 密度图 = 更丰满!
sns.violinplot(x='Species', y='Petal.Width', data=df_iris)
中间白点是中位数,胖的地方表示数据密集——像不像数据的“腰围”?
❝💡 类比:箱线图是体检报告里的“指标范围”,小提琴图则是“全身体脂分布图”!
📊 7. 柱状图 & 计数图:谁最受欢迎?
📊 barplot:默认显示均值(带误差线!)
sns.barplot(x='Species', y='Petal.Length', data=df_iris)
📊 countplot:直接统计频次,不用手动 groupby!
sns.countplot(x='class', hue='who', data=titanic)
❝💡 场景:想知道头等舱里男性多还是女性多?countplot 一秒出结果!
🔗 8. 多变量关系图:jointplot & regplot
🔗 jointplot:两个变量的关系 + 各自分布
sns.jointplot(x='Petal.Length', y='Petal.Width', data=df_iris)
想更高级?换成 kind='kde',变成等高线密度图:
sns.jointplot(x='Petal.Length', y='Petal.Width', data=df_iris, kind='kde')
📉 regplot:一键拟合回归线,看趋势
sns.regplot(x='total_bill', y='tip', data=tips)
❝💡 类比:regplot 就像问:“你花得越多,小费给得越多吗?”——答案藏在斜率里!
🌈 9. relplot:关系图的“瑞士军刀”
relplot 是 Seaborn 的“全能选手”,通过 kind 参数切换散点图 or 折线图:
sns.relplot(x="total_bill", y="tip", hue="day", col="time", data=tips)
❝💡 效果:一张图,讲清多个维度的故事!
🔥 10. 热力图(heatmap):一眼看出“热点区域”
相关性矩阵太枯燥?画成热力图!
corr = df_iris.corr()sns.heatmap(corr, annot=True, cmap='coolwarm')
颜色越红,正相关越强;越蓝,负相关越强。
❝💡 应用场景:老板问“哪些特征最相关?”——甩出这张图,升职加薪不是梦!
✅ 总结:Seaborn 的三大优势
❝🎁 彩蛋:想快速恢复默认设置?
sns.set() # 一键 reset,回到初心
现在,轮到你了!打开 Jupyter Notebook,敲下 import seaborn as sns,让你的数据,从此“貌美如花” 💐