前言
在数据可视化中,图表的美观和清晰度至关重要,Seaborn,作为Python强大的可视化库,提供了丰富的风格和调色板选项,帮助我们轻松绘制更具美感的图表,本文将详细展示如何在不同主题和配色下进行图表可视化,助你提升数据展示的吸引力和表现力
实验数据
import seaborn as sns
import matplotlib.pyplot as plt
# 加载seaborn自带的“tips”数据集
tips = sns.load_dataset("tips")
tips
实验数据集名为“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()
在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()
顺序调色板
# 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()
发散调色板
# 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()
往期推荐
微信号|deep_ML
欢迎添加作者微信进入Python、ChatGPT群
进群请备注Python或AI进入相关群
无需科学上网、同步官网所有功能、使用无限制
如果你对类似于这样的文章感兴趣。
欢迎关注、点赞、转发~
个人观点,仅供参考