Seaborn风格与调色板详解:让图表配色更出彩

大模型机器学习关系型数据库

picture.image

前言

在数据可视化中,图表的美观和清晰度至关重要,Seaborn,作为Python强大的可视化库,提供了丰富的风格和调色板选项,帮助我们轻松绘制更具美感的图表,本文将详细展示如何在不同主题和配色下进行图表可视化,助你提升数据展示的吸引力和表现力

实验数据


          
import seaborn as sns
          
import matplotlib.pyplot as plt
          

          
# 加载seaborn自带的“tips”数据集
          
tips = sns.load_dataset("tips")
          
tips
      

picture.image

实验数据集名为“tips”,是Seaborn自带的一个经典示例数据集,通常用于展示和测试数据可视化技术,它记录了餐厅服务员在多个时间段内收到的小费信息,涵盖了数值型和分类型变量

Seaborn风格


          
# Seaborn的五种预定义风格
          
styles = ["darkgrid", "whitegrid", "dark", "white", "ticks"]
          

          
# 创建一个画布,总共6个子图
          
plt.figure(figsize=(18, 12))
          

          
# 使用循环绘制不同风格的子图
          
for i, style in enumerate(styles):
          
    sns.set(style=style)
          
    plt.subplot(2, 3, i + 1)
          
    sns.regplot(x="total_bill", y="tip", data=tips, scatter_kws={"s": 50, "alpha": 0.5}, 
          
                line_kws={"color": "red"})
          
    plt.title(f"Style: {style}", fontsize=14)
          
    plt.xlabel("Total Bill ($)", fontsize=12)
          
    plt.ylabel("Tip ($)", fontsize=12)
          
plt.savefig('1.png', bbox_inches='tight', dpi=1200)
          
plt.tight_layout()
          
plt.show()
      

picture.image

在Seaborn中,风格设置可以用来调整图表的背景、网格线等视觉元素,使图表在不同场景下达到最佳展示效果,Seaborn提供了五种预定义的风格:darkgrid、whitegrid、dark、white 和 ticks,可以通过 sns.set(style="风格名") 的语法来应用

darkgrid:背景上应用深色调,并且显示网格线

whitegrid:背景为浅色,网格线为灰色

dark:采用深色背景,但不显示网格线

white:使用白色背景并且没有网格线

ticks:在图表中添加了轴的刻度线(ticks),背景为白色,没有网格线

Seaborn调色版

Seaborn 提供了丰富的调色板选项,可以通过 sns.color_palette() 和 sns.set_palette() 使用,调色板大致可以分为以下几类: 分类调色板(通常用于区分不同的类别)、顺序调色板(适用于表现逐渐变化的值)、发散调色板(通常用于表现从中间向两端发散的数据)

分类调色板:

"deep", "muted", "bright", "pastel", "dark", "colorblind"

顺序调色板:"Blues", "BuGn", "BuPu", "GnBu", "Greens", "Greys", "Oranges", "OrRd", "PuBu", "PuBuGn", "PuRd", "Purples", "RdPu", "Reds", "YlGn", "YlGnBu", "YlOrBr", "YlOrRd"

发 散调色板:"BrBG", "PiYG", "PRGn", "PuOr", "RdBu", "RdGy", "RdYlBu", "RdYlGn", "Spectral"

分类调色板


          
# 定义Seaborn的分类调色板
          
categorical_palettes = ["deep", "muted", "bright", "pastel", "dark", "colorblind"]
          

          
plt.figure(figsize=(15, 10))
          

          
# 遍历每个分类调色板并绘制其颜色
          
for i, palette in enumerate(categorical_palettes):
          
    # 设置当前调色板
          
    sns.set_palette(palette)
          
    plt.subplot(2, 3, i + 1)
          
    
          
    # 使用barplot展示不同天数和总账单的关系
          
    sns.barplot(x="day", y="total_bill", hue="sex", data=tips)
          
    plt.title(f"Palette: {palette}", fontsize=14)
          
plt.savefig('2.png', bbox_inches='tight', dpi=600)
          
plt.tight_layout()
          
plt.show()
      

picture.image

顺序调色板


          
# Seaborn的所有顺序调色板
          
sequential_palettes = [
          
    "Blues", "BuGn", "BuPu", "GnBu", "Greens", "Greys", "Oranges", 
          
    "OrRd", "PuBu", "PuBuGn", "PuRd", "Purples", "RdPu", "Reds", 
          
    "YlGn", "YlGnBu", "YlOrBr", "YlOrRd"
          
]
          

          
# 创建一个大画布
          
plt.figure(figsize=(18, 30))
          

          
# 遍历每个顺序调色板并绘制其效果
          
for i, palette in enumerate(sequential_palettes):
          
    plt.subplot(6, 3, i + 1)
          
    
          
    # 使用violinplot展示总账单金额的分布,按调色板进行色彩映射
          
    sns.violinplot(x="day", y="total_bill", data=tips, palette=sns.color_palette(palette))
          
    
          
    # 设置标题
          
    plt.title(f"Palette: {palette}", fontsize=10)
          

          
plt.tight_layout()
          
plt.savefig('sequential_palettes_with_tips.png', bbox_inches='tight', dpi=600)
          
plt.show()
      

picture.image

发散调色板


          
# Seaborn的所有发散调色板
          
diverging_palettes = [
          
    "BrBG", "PiYG", "PRGn", "PuOr", "RdBu", 
          
    "RdGy", "RdYlBu", "RdYlGn", "Spectral"
          
]
          

          
# 创建一个大画布
          
plt.figure(figsize=(18, 18))
          

          
# 遍历每个发散调色板并绘制其效果
          
for i, palette in enumerate(diverging_palettes):
          
    plt.subplot(3, 3, i + 1)
          
    
          
    # 使用kdeplot展示total_bill的核密度估计,按调色板进行色彩映射
          
    sns.kdeplot(x="total_bill", hue="sex", data=tips, fill=True, palette=sns.color_palette(palette, 2), common_norm=False, alpha=0.7)
          
    
          
    # 设置标题
          
    plt.title(f"Palette: {palette}", fontsize=12)
          

          
# 调整子图之间的间距
          
plt.tight_layout()
          
plt.savefig('diverging_palettes_kdeplot.png', bbox_inches='tight', dpi=600)
          
plt.show()
      

picture.image

往期推荐

利用SHAP解释二分类模型的四种机器学习GUI工具

模型过拟合与欠拟合的核心原理及其与数据集分割的关系

复现顶刊Streamlit部署预测模型APP

数据预处理全攻略:从缺失值到特征工程,一站式解决方案

精确度与参数的完美融合:用可视化解读模型优化过程

优化XGBoost回归模型:网格搜索与K折交叉验证实现

提升机器学习精度:利用SHAP值与蒙特卡洛模拟优化特征选择

picture.image

picture.image

picture.image

微信号|deep_ML

欢迎添加作者微信进入Python、ChatGPT群

进群请备注Python或AI进入相关群
无需科学上网、同步官网所有功能、使用无限制

如果你对类似于这样的文章感兴趣。

欢迎关注、点赞、转发~

个人观点,仅供参考

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论