pythonic生物人

seaborn VS. matplotlib啥关系!

最近,一些小伙伴留言询问seaborn和matplotlib怎么选,还是两个都要学?

本文详细回答以下问题:

  • seaborn和matplotlib是什么?
  • seaborn和matplotlib的优劣势?
  • seaborn和matplotlib怎么选?
  • seaborn和matplotlib怎么学?

seaborn和matplotlib是什么?

seaborn和matplotlib是Python可视化方向最优秀的两个包,用数据说话。

  • matplotlib

matplotlib目前20.6k stars,

Image
20.6k stars

matplotlib可能是最常用的 Python 2D 图形包,掌握matplotlib后,你可以:

  • 创建适合出版的,高质量的科研图表(scientific figures)和非科研图表(non‐scientific figures)
  • 制作可交互的图表,支持缩放、平移和更新
  • 自定义视觉样式和布局,可轻松调整图表中的任何细节
  • 导出图表为多种文件格式,例如,PNG、PDF、SVG、GIF等

可以看一些案例:

👉matplotlib的上限:可“追星”,可“逐浪”!

👉详解Python matplotlib深度美化(第一期)


  • seaborn

seaborn目前12.7k stars,

Image
12.7k stars
  • seaborn是一个用于在Python中创建统计图形的库,它是matplotlib的高级封装(只需要调用最少的参数,即可搞定publication-quality figures)。
  • seaborn使用非常简单,通过调用seaborn的一系列绘图函数来可视化数据,这些函数可划分为坐标轴级别(axes-level)绘图函数和图形级别(figure-level)绘图函数两大类,
Image
seaborn主要方法

同样可以看一些案例:

👉55个热力图heatmap代码模版~

👉51个图表,完美展示数据分布关系!

👉141个图表,完美展示数据分类关系!

👉53个图表,完美展示数据组合关系!

👉可视化配色工具,colormap多达3174类,数万种颜色!

和比较火的R ggplot2比较一下就知道它们使用群体确实很大,ggplot2 6.6k stars,

Image
6.6k stars

seaborn和matplotlib的优劣势?

先上结论:

比较维度SeabornMatplotlib
易用性提供高级抽象接口,易于快速生成复杂且美观的可视化,默认设置优秀,代码简洁。更底层,需要更多代码实现相同功能,初学者学习曲线较陡。
自定义能力自定义能力有限,依赖 Matplotlib 提供底层支持,但可满足大多数常见需求。高度可定制,几乎所有图形元素都可调整,适合复杂或非常特定的可视化需求。
美观性默认主题美观,图形风格现代化,颜色调色板丰富,适合直接用于演示。默认风格较为基础,需要额外设置才能达到更高的美观度,但提供全面的控制选项。

还是举例子说明,

  • 易用性

易用性层面,seaborn几行代码即可绘制美观的、复杂的图表,matplotlib也可以,需要大量代码。但是,seaborn能力有限,比如pie图这种简单的东西他都没有,seaborn只有高频图表的方法。

seaborn几行代码可以实现聚类heatmap图,

Image
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几行代码也可以实现边际图,

Image
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图,

Image
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没法完成,

Image

seaborn自定义能力有限,但是可以满足日常使用,可参考这篇文章,

👉Python seaborn超级细节完结篇-联合美化


  • 美观性

二者默认参数出图都颜值有限,靠个人能力都可以抚平,例如,

Image
matplotlib图表案例
Image
seaborn图表案例

seaborn和matplotlib怎么选?

如果你需要对图表的每个细节进行完全控制,并希望创建复杂的可视化,那么 matplotlib 可能是更好的选择。然而,如果你希望以最小的工作量快速创建统计图表,那么seaborn 会是更好的选择。

总之,seaborn 和 matplotlib 各有其优缺点,强烈建议二者都学。


seaborn和matplotlib怎么学?

超级系统的学习很必要,持续更新。

👉

👉《》

(加入学习,收费,备注:299)

Image