【四 (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('热力图示例:相关系数矩阵')
相关推荐
老白干10 分钟前
jjwt 0.9.1 在 JDK 11+ 上的两个“坑”与完整解决方案
java·python·log4j
笨鸟先飞,勤能补拙7 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
长和信泰光伏储能8 小时前
京津冀光伏发电:绿色能源的未来之路
python·能源
浦信仿真大讲堂8 小时前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
Gu Gu Study8 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
卷无止境9 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境9 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd1239 小时前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy123931021610 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb0010 小时前
一个项目带你入门AI应用开发01
python