【四 (3)数据可视化之 Seaborn 常用图表及代码实现 】

目录

文章导航

【一 简明数据分析进阶路径介绍(文章导航)】

一、介绍

Seaborn同Matplotlib一样,也是Python进行数据可视化分析的重要第三方包。但Seaborn在Matplotlib的基础上进行了更高级的API封装,使得作图更加容易,图形更加漂亮。Seaborn是基于Matplotlib产生的一个模块,专攻统计可视化,可以和Pandas进行无缝链接,使初学者更容易上手。相对于Matplotlib,Seaborn语法更简洁,两者的关系类似于NumPy和Pandas之间的关系。

但是应该强调的是,应该把Seaborn视为Matplotlib的补充,而不是替代物。

二、安装Seaborn

python 复制代码
pip install seaborn

三、导入Seaborn

python 复制代码
import seaborn as sns

四、设置可以中文显示

python 复制代码
import matplotlib.pyplot as plt  
  
# 设置matplotlib支持中文显示  
plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体  
plt.rcParams['axes.unicode_minus'] = False  # 解决负号'-'显示为方块的问题
from matplotlib import font_manager  
  
# 设置Matplotlib配置参数  
plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体  
plt.rcParams['axes.unicode_minus'] = False  # 正确显示负号

五、占比类图表

1、饼图

import matplotlib.pyplot as plt  
  
# 假设我们有以下数据  
labels = ['类别A', '类别B', '类别C', '类别D']  
sizes = [15, 30, 45, 10]  # 百分比或数量  
  
# 绘制占饼图  
fig1, ax1 = plt.subplots()  
ax1.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)  
ax1.axis('equal')  # Equal aspect ratio ensures that pie is drawn as a circle.  
  
plt.title('占饼图示例')  
plt.show()

2、环形图

import matplotlib.pyplot as plt  
import numpy as np  
  
# 假设我们有以下数据  
labels = ['类别A', '类别B', '类别C', '类别D']  
sizes = [15, 30, 45, 10]  # 外环数据  
sizes_inner = [10, 15, 30, 5]  # 内环数据  
  
# 确保内环数据不超过外环数据  
sizes_inner = [min(s, si) for s, si in zip(sizes, sizes_inner)]  
  
# 计算百分比  
sizes_pct = [s / sum(sizes) * 100 for s in sizes]  
sizes_inner_pct = [si / sum(sizes_inner) * 100 for si in sizes_inner]  
  
# 绘制环形图  
fig, ax = plt.subplots()  
  
# 外环  
ax.pie(sizes, labels=labels, colors=['blue'], wedgeprops=dict(width=0.3, edgecolor='w'), startangle=90)  
  
# 内环  
ax.pie(sizes_inner,  colors=['red'], wedgeprops=dict(width=0.1, edgecolor='w'), startangle=90)  
  
# 绘制中心圆  
ax.add_artist(plt.Circle((0.5, 0.5), 0.05, fc='white', ec='white'))  
  
# 添加百分比标签  
def func(pct, allvals):  
    absolute = int(round(pct/100.*np.sum(allvals)))  
    return "{:.1f}% ({})".format(pct, absolute)  
  
# 外环百分比标签  
wedges, texts, autotexts = ax.pie(sizes, labels=labels, autopct=lambda pct: func(pct, sizes),  
                                   wedgeprops=dict(width=0.3, edgecolor='w'), startangle=90)  
  
# 设置标题和等比例显示  
ax.set_title('环形图示例')  
ax.axis('equal')  
  
plt.show()

六、比较排序类

1、条形图

import seaborn as sns  
import matplotlib.pyplot as plt  
import pandas as pd  
  
# 假设有一个包含分类变量和连续变量的DataFrame  
data = pd.DataFrame({  
    'Category': ['A', 'B', 'C', 'D', 'E'],  
    'Value': [23, 17, 35, 29, 12]  
})  
  
# 绘制条形图  
sns.barplot(x='Category', y='Value', data=data)  
  
# 设置图表标题和轴标签  
plt.title('条形图示例:不同类别的值')  
plt.xlabel('类别')  
plt.ylabel('值')  
  
# 显示图表  
plt.show()

2、箱线图

import seaborn as sns  
import matplotlib.pyplot as plt  
import pandas as pd  
import numpy as np  
  
# 假设有一个包含分类变量和连续变量的DataFrame  
np.random.seed(0)  # 设置随机种子以获得可复现的结果  
data = pd.DataFrame({  
    'Category': ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'],  
    'Value': np.random.randn(9) * 100  # 生成正态分布的数据  
})  
  
# 绘制箱线图  
sns.boxplot(x='Category', y='Value', data=data)  
  
# 设置图表标题和轴标签  
plt.title('箱线图示例:不同类别的值分布')  
plt.xlabel('类别')  
plt.ylabel('值')  
  
# 显示图表  
plt.show()

3、小提琴图

import seaborn as sns  
import matplotlib.pyplot as plt  
import pandas as pd  
import numpy as np  
  
# 假设有一个包含分类变量和连续变量的DataFrame  
np.random.seed(0)  # 设置随机种子以获得可复现的结果  
data = pd.DataFrame({  
    'Category': ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'],  
    'Value': np.random.randn(9) * 100  # 生成正态分布的数据  
})  
  
# 绘制小提琴图  
sns.violinplot(x='Category', y='Value', data=data)  
  
# 设置图表标题和轴标签  
plt.title('小提琴图示例:不同类别的值分布')  
plt.xlabel('类别')  
plt.ylabel('值')  
  
# 显示图表  
plt.show()

七、趋势类图表

1、折线图

import seaborn as sns  
import matplotlib.pyplot as plt  
import pandas as pd  
import numpy as np  
  
# 假设我们有一个包含时间序列和数值的数据集  
np.random.seed(0)  
data = pd.DataFrame({  
    'date': pd.date_range(start='2023-01-01', periods=12),  
    'value': np.random.randn(12).cumsum()  
})  
  
# 绘制线图  
sns.lineplot(data=data, x='date', y='value')  
  
# 设置图表标题和轴标签  
plt.title('折线图示例:随时间变化的数值')  
plt.xlabel('日期')  
plt.ylabel('值')  
  
# 显示网格  
plt.grid(True)  
  
# 显示图表  
plt.show()

八、频率分布类

1、直方图

import seaborn as sns  
import matplotlib.pyplot as plt  
import numpy as np  
  
# 生成随机数据  
np.random.seed(0)  
data = np.random.randn(1000)  
  
# 绘制直方图  
sns.histplot(data, kde=True)  
  
# 设置图表标题和轴标签  
plt.title('直方图示例:数据分布')  
plt.xlabel('值')  
plt.ylabel('频数')  
  
# 显示网格  
plt.grid(True)  
  
# 显示图表  
plt.show()

九、关系类图表

1、散点图

import seaborn as sns  
import matplotlib.pyplot as plt  
import pandas as pd  
  
# 创建一个模拟的数据集  
data = pd.DataFrame({  
    'Math': [85, 92, 78, 95, 88, 76, 91, 82, 79, 85],  
    'English': [88, 90, 82, 93, 87, 79, 92, 83, 80, 86]  
})  
  
# 绘制散点图  
sns.scatterplot(data=data, x='Math', y='English', hue='Math')  
  
# 添加图例标题  
plt.legend(title='数学成绩')  
  
# 设置图表标题和轴标签  
plt.title('学生数学和英语成绩散点图')  
plt.xlabel('数学成绩')  
plt.ylabel('英语成绩')  
  
# 显示网格  
plt.grid(True)  
  
# 调整图表大小  
plt.figure(figsize=(8, 6))  
  
# 显示图表  
plt.show()

2、成对关系图

import seaborn as sns  
import pandas as pd  
import numpy as np  
  
# 假设我们有一个包含多个连续变量的数据集  
np.random.seed(0)  
data = pd.DataFrame(np.random.randn(200, 4), columns=['A', 'B', 'C', 'D'])  
  
# 绘制成对关系图  
sns.pairplot(data, kind='reg')  # 添加线性回归线  
  
# 设置图表标题  
plt.suptitle('成对关系图示例:多个连续变量之间的关系', y=1.05)  
  
# 显示图表  
plt.show()

3、热力图

import seaborn as sns  
import matplotlib.pyplot as plt  
import numpy as np  
  
# 创建一个随机的相关系数矩阵  
np.random.seed(0)  
corr_matrix = np.random.rand(6, 6)  
corr_matrix = (corr_matrix + corr_matrix.T) / 2  # 保证矩阵是对称的  
np.fill_diagonal(corr_matrix, 1)  # 对角线元素设为1  
  
# 绘制热力图  
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')  
  
# 设置图表标题  
plt.title('热力图示例:相关系数矩阵')
相关推荐
南宫理的日知录12 分钟前
99、Python并发编程:多线程的问题、临界资源以及同步机制
开发语言·python·学习·编程学习
皓74113 分钟前
服饰电商行业知识管理的创新实践与知识中台的重要性
大数据·人工智能·科技·数据分析·零售
coberup21 分钟前
django Forbidden (403)错误解决方法
python·django·403错误
龙哥说跨境1 小时前
如何利用指纹浏览器爬虫绕过Cloudflare的防护?
服务器·网络·python·网络爬虫
小白学大数据1 小时前
正则表达式在Kotlin中的应用:提取图片链接
开发语言·python·selenium·正则表达式·kotlin
flashman9111 小时前
python在word中插入图片
python·microsoft·自动化·word
菜鸟的人工智能之路1 小时前
桑基图在医学数据分析中的更复杂应用示例
python·数据分析·健康医疗
懒大王爱吃狼2 小时前
Python教程:python枚举类定义和使用
开发语言·前端·javascript·python·python基础·python编程·python书籍
秃头佛爷3 小时前
Python学习大纲总结及注意事项
开发语言·python·学习
深度学习lover4 小时前
<项目代码>YOLOv8 苹果腐烂识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·苹果腐烂识别