目录
1.Seaborn图表概述
Seaborn是一个基于Matplotlib的Python数据可视化库,它提供了一种高级界面来绘制有吸引力的统计图形。Seaborn的图表主要分为以下几类:
- 关系类图表:这类图表主要用于展示两个或多个变量之间的关系。包括散点图(scatterplot)和折线图(lineplot)。
- 分类图表:这类图表主要用于展示分类数据。包括条形图(barplot)、计数图(countplot)、分类散点图(stripplot)、能够显示分布密度的分类散点图(swarmplot)、箱图(boxplot)、小提琴图(violinplot)、增强箱图(boxenplot)和点图(pointplot)。
- 分布图:这类图表主要用于展示数据的分布情况。包括直方图(distplot)、质量估计图、核函数密度估计图(kdeplot)和rugplot(将数组中的数据点绘制为轴上的数据)。
- 双变量关系图:这类图表用于展示两个变量之间的二元关系,通常使用联合分布图(jointplot)和变量关系组图(pairplot)来表示。
2.安装Seaborn图表
由于Seaborn依赖Scipy,所以安装Seaborn之前要安装Scipy,下面是安装Seaborn的代码:
pip install seaborn
3.Seaborn图表的基本设置
3.1设置图表的背景风格
axes_style 用于查看或临时修改样式的参数设置。
set_style 用于设置全局默认样式。
Seaborn 提供了多种内置的背景主题(或称为样式),这些主题可以影响图表的外观,包括网格线、背景颜色、字体大小等。这些主题是为了让图表在不同的背景和情境下都能保持清晰和一致。
以下是 Seaborn 的一些内置背景主题(样式):
darkgrid:深色网格背景,白色网格线。
whitegrid:白色背景,深色网格线。
dark:深色背景,没有网格线。
white: 白色背景,没有网格线。
ticks:浅色背景,有刻度线但没有网格线。
5个背景风格的示例:
import seaborn as sns
import matplotlib.pyplot as plt
# 设置不同的背景主题
styles = ["darkgrid", "whitegrid", "dark", "white", "ticks"]
for style in styles:
# 设置当前样式
sns.set_style(style)
# 绘制一个简单的线图
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
plt.plot(x, y)
# 设置图表标题以显示当前样式
plt.title(f"Chart with '{style}' style")
# 显示图表
plt.show()
# 稍微延迟一下,以便观察每个图表
plt.pause(0.5)
3.2 设置图表的边框
使用despine函数设置图表的边框
despine
是 seaborn
库中的一个函数,用于清理和美化 matplotlib
图表,通过移除顶部和/或右侧的边框和刻度线来实现。下面是 despine
函数的一些参数及其说明:
fig
:matplotlib
的 Figure
对象。如果不提供,则使用当前活动的 Figure
。
ax
:matplotlib
的 Axes
对象或对象数组。指定要应用 despine
的轴。如果没有提供,则使用 fig
中的所有轴。
top
:布尔值,默认为 True
。如果为 True
,则移除顶部边框和刻度线。
right
:布尔值,默认为 True
。如果为 True
,则移除右侧边框和刻度线。
left
:布尔值,默认为 False
。如果为 True
,则移除左侧边框和刻度线。
bottom
:布尔值,默认为 False
。如果为 True
,则移除底部边框和刻度线。
offset
:标量或标量数组,可选。从轴边缘到刻度线的距离。正值将刻度线向内移动,负值将刻度线向外移动。
trim
:布尔值,默认为 False
。如果为 True
,则修剪多余的空白空间。
示例:
import pandas as pd # 导入pandas库,并为其指定别名pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
# 创建一个自定义数据集
x = np.linspace(0, 10, 100) # 生成0到10之间的100个点
y = np.sin(x) # 对每个x点计算正弦值
data = pd.DataFrame({'x': x, 'y': y}) # 使用pd作为pandas的别名来创建DataFrame
# 使用seaborn的 lineplot 函数绘制线图
ax = sns.lineplot(data=data, x='x', y='y')
# 使用despine移除左侧的边框
sns.despine(ax=ax, left=True)
# 设置图表标题和坐标轴标签
ax.set_title('Custom Line Plot with Despine')
ax.set_xlabel('X Axis Label')
ax.set_ylabel('Y Axis Label')
# 显示图表
plt.show()
运行结果:
4.常见图表的绘制
41 .柱形图的绘制
使用barplot函数进行绘制
示例:
import seaborn as sns
import matplotlib.pyplot as plt
# 假设我们有以下数据
categories = ['Category A', 'Category B', 'Category C', 'Category D']
values = [23, 45, 56, 34]
# 使用pandas创建一个简单的DataFrame(如果需要的话)
import pandas as pd
data = pd.DataFrame({
'category': categories,
'value': values
})
# 使用seaborn的barplot函数绘制柱形图
sns.barplot(x='category', y='value', data=data)
# 添加标题和坐标轴标签
plt.title('Bar Chart Example with Seaborn')
plt.xlabel('Categories')
plt.ylabel('Values')
# 显示图形
plt.show()
运行结果:
4.2 折线图的绘制
使用lineplot函数进行绘制
示例:
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
# 创建一个简单的数据集
data = {
'time': ['2021-01', '2021-02', '2021-03', '2021-04', '2021-05'],
'value': [23, 45, 34, 56, 67]
}
# 将数据转换为DataFrame
df = pd.DataFrame(data)
# 将'time'列转换为日期类型
df['time'] = pd.to_datetime(df['time'])
# 使用seaborn的lineplot函数绘制折线图
sns.lineplot(x='time', y='value', data=df)
# 添加标题和坐标轴标签
plt.title('Line Chart Example with Seaborn')
plt.xlabel('Time')
plt.ylabel('Values')
# 显示图形
plt.show()
运行结果:
在Seaborn库中,relplot
函数是一个更高级别的接口,用于绘制关系图,它可以处理多个变量之间的关系,并根据数据类型自动选择最合适的图形类型。对于绘制折线图,您可以使用relplot
并设置kind='line'
。
示例:
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
# 创建一个简单的数据集
data = {
'time': ['2021-01', '2021-02', '2021-03', '2021-04', '2021-05'],
'value': [23, 45, 34, 56, 67]
}
# 将数据转换为DataFrame
df = pd.DataFrame(data)
# 将'time'列转换为日期类型
df['time'] = pd.to_datetime(df['time'])
# 使用seaborn的relplot函数绘制折线图
sns.relplot(data=df, x='time', y='value', kind='line')
# 添加标题
plt.title('Line Chart Example with Seaborn relplot')
# 显示图形
plt.show()
4.3 散点图的绘制
示例:
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
# 假设我们有一个简单的数据集
data = {
'x': [1, 2, 3, 4, 5],
'y': [2, 4, 1, 3, 5]
}
df = pd.DataFrame(data)
# 首次绘制散点图
sns.scatterplot(x='x', y='y', data=df)
plt.title('First Scatter Plot')
plt.show()
运行结果: