Python seaborn和matplotlib,怎么选?
最近,一些小伙伴留言询问seaborn和matplotlib怎么选,还是两个都要学?
本文详细回答以下问题:
seaborn和matplotlib是什么?
seaborn和matplotlib是Python可视化方向最优秀的两个包,用数据说话。
matplotlib目前20.6k stars,

matplotlib可能是最常用的 Python 2D 图形包,掌握matplotlib后,你可以:
创建适合出版的,高质量的科研图表(scientific figures)和非科研图表(non‐scientific figures)
制作可交互的图表,支持缩放、平移和更新
自定义视觉样式和布局,可轻松调整图表中的任何细节
导出图表为多种文件格式,例如,PNG、PDF、SVG、GIF等
可以看一些案例:
👉matplotlib的上限:可“追星”,可“逐浪”!
👉详解Python matplotlib深度美化(第一期)
seaborn目前12.7k stars,

同样可以看一些案例:
👉55个热力图heatmap代码模版~
👉51个图表,完美展示数据分布关系!
👉141个图表,完美展示数据分类关系!
👉53个图表,完美展示数据组合关系!
👉可视化配色工具,colormap多达3174类,数万种颜色!
和比较火的R ggplot2比较一下就知道它们使用群体确实很大,ggplot2 6.6k stars,

seaborn和matplotlib的优劣势?
先上结论:
比较维度 | Seaborn | Matplotlib |
---|---|---|
易用性 | 提供高级抽象接口,易于快速生成复杂且美观的可视化,默认设置优秀,代码简洁。 | 更底层,需要更多代码实现相同功能,初学者学习曲线较陡。 |
自定义能力 | 自定义能力有限,依赖 Matplotlib 提供底层支持,但可满足大多数常见需求。 | 高度可定制,几乎所有图形元素都可调整,适合复杂或非常特定的可视化需求。 |
美观性 | 默认主题美观,图形风格现代化,颜色调色板丰富,适合直接用于演示。 | 默认风格较为基础,需要额外设置才能达到更高的美观度,但提供全面的控制选项。 |
还是举例子说明,
易用性层面,seaborn几行代码即可绘制美观的、复杂的图表,matplotlib也可以,需要大量代码。但是,seaborn能力有限,比如pie图这种简单的东西他都没有,seaborn只有高频图表的方法。
seaborn几行代码可以实现聚类heatmap图,
sns.clustermap(
data=healthexp[healthexp.洲名称.isin(['Asia', 'Europe'])],
pivot_kws={'index': ['洲名称', '国家名称'],'columns': '年份','values': '预期寿命'
},#行方向聚类按照颜色区分不同'洲名称'
row_colors=healthexp[healthexp.洲名称.isin(
['Asia', 'Europe'])]['洲名称'].map(row_c),
annot=True,
fmt=".1f",
annot_kws={"fontsize": 10
},
cmap=sns.diverging_palette(255, 5, as_cmap=True),
)
seaborn几行代码也可以实现边际图,
sns.boxplot(penguins, y=g.hue, x=g.x, palette=["#006a8e", "#b1283a"], boxprops=dict(alpha=0.3), linewidth=1, ax=g.ax_marg_x)
sns.stripplot(penguins, y=g.hue, x=g.x, palette=["#006a8e", "#b1283a"], alpha=0.5, s=6, ax=g.ax_marg_x)
sns.boxplot(penguins, x=g.hue, y=g.y, palette=["#006a8e", "#b1283a"], boxprops=dict(alpha=0.3), linewidth=1, ax=g.ax_marg_y)
sns.stripplot(penguins, x=g.hue, y=g.y, palette=["#006a8e", "#b1283a"], alpha=0.5, s=6, ax=g.ax_marg_y)
当然,matplotlib也可以绘制很好看的图表,但是,需要大量代码, 例如,matplotlib实现复杂分面heatmap图,
for ax, cmap, title in zip(axes.ravel(), cmaps, titles):
im = ax.imshow(heatmap_data, cmap=cmap, aspect='auto') # imshow绘制热图
ax.set_title(title, fontsize=20)
ax.set_xticks(np.arange(len(sample_names)))
ax.set_xticklabels(sample_names, rotation=45, ha="right",
fontsize=20) # 设置x轴标签
ax.set_yticks(np.arange(len(gene_names)))
ax.set_yticklabels(gene_names, fontsize=20) # 设置y轴标签
for i in range(len(gene_names)):
for j in range(len(sample_names)):
ax.text(j,
i,
f'{heatmap_data[i, j]:.2f}',
ha="center",
va="center",
fontsize=18,
color="black") # 在每个格子中添加数值
cbar = plt.colorbar(im, ax=ax, shrink=0.9) # 添加colorbar
cbar.ax.tick_params(labelsize=20)
seaborn自定义能力有限,依赖 matplotlib 提供底层支持,但可满足大多数常见需求。matplotlib高度可定制,几乎所有图形元素都可调整,适合复杂或非常特定的可视化需求。
例如,下面这个高度自定义的图表,seaborn没法完成,
seaborn自定义能力有限,可参考这篇文章,
👉Python seaborn超级细节完结篇-联合美化
二者默认参数出图都颜值有限,靠个人能力都可以抚平,例如,


seaborn和matplotlib怎么选?
如果你需要对图表的每个细节进行完全控制,并希望创建复杂的可视化,那么 matplotlib 可能是更好的选择。然而,如果你希望以最小的工作量快速创建统计图表,那么seaborn 会是更好的选择。
总之,seaborn 和 matplotlib 各有其优缺点,强烈建议二者都学。
seaborn和matplotlib怎么学?
Python matplotlib保姆级教程
嫌Matplotlib繁琐?试试Seaborn!
作者:qq_21478261