Python seaborn和matplotlib,怎么选?

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

本文详细回答以下问题:

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

  • seaborn和matplotlib是什么?

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

  • matplotlib
  • matplotlib目前20.6k stars,

    20.6k stars

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

  • 创建适合出版的,高质量的科研图表(scientific figures)和非科研图表(non‐scientific figures)

  • 制作可交互的图表,支持缩放、平移和更新

  • 自定义视觉样式和布局,可轻松调整图表中的任何细节

  • 导出图表为多种文件格式,例如,PNG、PDF、SVG、GIF等

  • 可以看一些案例:

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

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


  • seaborn
  • seaborn目前12.7k stars,

    12.7k stars
    12.7k stars

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

    同样可以看一些案例:

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

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

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

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

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

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

    6.6k stars
    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超级细节完结篇-联合美化  


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

    matplotlib图表案例
    seaborn图表案例


    seaborn和matplotlib怎么选?

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

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


    seaborn和matplotlib怎么学?

    Python matplotlib保姆级教程

    嫌Matplotlib繁琐?试试Seaborn! 

    作者:qq_21478261

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python seaborn和matplotlib,怎么选?

    发表回复