目录
引言
正文
01-Matplotlib包的使用示例
1)Matplotlib导入方式
2)折线图绘制
3)散点图绘制
4)柱状图绘制
5)饼图绘制
6)等高线图绘制
7)箱线图绘制
8)较为复杂的折线图绘制
9)热力图绘制
02-Seaborn包的使用示例
1)Seaborn导入方式和优势
2)热图绘制
3)密度图绘制
4)小提琴图绘制
5)聚类图绘制
6)分面网格图绘制
7)带有误差带的时间序列图绘制
8)Seaborn使用Pandas数据框数据可视化
9)Seaborn绘制多个图
10)具有边际分布的Hexbin图绘制
总结
引言
Matplotlib和Seaborn是Python中两个常用的数据可视化工具包。Matplotlib是Python中最流行的绘制图表的库之一,它提供了广泛的绘图功能,可以创建各种类型的图表,如折线图、柱状图、散点图等。Seaborn则是基于Matplotlib的高级数据可视化库,提供了更简单直接的接口,让用户能够更轻松地创建美观的统计图表。
Matplotlib的主要作用是提供基础的绘图功能,用户可以根据需要自定义图表的各个元素,并且能够灵活地控制图表的样式和布局。Seaborn则在Matplotlib的基础上进一步封装了一些常用的统计图表,使得用户无需深入了解绘图的细节,就可以快速地创建漂亮的图表。Seaborn还提供了一些高级的数据可视化功能,如热图、密度图等,使得用户能够更直观地分析数据。
下图分别是两种工具包的官方网站主页,链接在该篇文章的第二小节中。[机器学习-01]一文了解|机器学习简介、工具选择和Python包基础应用-CSDN博客
正文
在实际应用中,Matplotlib和Seaborn可以结合使用,Matplotlib用于创建基础的图表结构,而Seaborn则用于美化图表并添加更多统计特性。通过这两种工具包的配合,用户可以更高效地进行数据可视化工作,并且能够得到更具说服力的图表结果。接下来,我们将展示如何使用Matplotlib和Seaborn这两个工具包进行数据可视化的实战过程。
01-Matplotlib包的使用示例
Matplotlib是一个用于绘制各种图形和图表的Python包。其主要作用是提供了丰富的绘图函数和方法,使用户可以快速、方便地可视化数据和结果。Matplotlib可以用于创建折线图、散点图、柱状图、饼图、等高线图等不同类型的图形,以便更直观地展示数据的分布、趋势和关系。通过Matplotlib绘制的图形可以帮助用户更好地理解数据、分析结果和模型表现,从而支持决策和沟通。因此,Matplotlib在数据科学、数据分析、统计学、机器学习等领域中被广泛应用。在上面的工具箱官网中包含了众多图形绘制实例,
1)Matplotlib导入方式
Matplotlib包的导入代码如下,plt.show()有释放资源的作用,因此保存图像必须在前面运行,否则,保存的是空白。
import matplotlib.pyplot as plt
import random
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus'] = False
下面对Matplotlib包中常用的数据可视化图像绘制进行详细分析:
2)折线图绘制
折线图是一种简单而有效的数据可视化工具,能够帮助用户更好地理解数据和进行数据分析。代码和运行结果如下图所示:
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(-10,10,1000)
y = np.sin(x)plt.plot(x, y, color='b', marker='o', linestyle='-', linewidth=1, markersize=1) # 设置线条颜色为蓝色,数据点形状为圆圈,线型为实线,线条宽度为2,数据点大小为8
plt.xlabel('X轴', fontsize=12, color='black') # 设置X轴标签文字为黑色、字号大小为12
plt.ylabel('Y轴', fontsize=12, color='black') # 设置Y轴标签文字为黑色、字号大小为12
plt.title('折线图', fontsize=14, color='black') # 设置标题为黑色、字号大小为14
plt.grid(True, linestyle='--', color='gray', alpha=0.6) # 显示网格,线型为虚线,颜色为灰色,透明度为0.6
plt.savefig("../1.png", dpi=300)
plt.show()
3)散点图绘制
散点图是一种简单而有效的数据可视化工具,适用于展示数据分布、发现关联性、识别异常值和比较不同类别数据等分析需求。代码和运行结果如下图所示:
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus'] = False
x = [1, 2, 3, 4, 5,6,7,8,9]
y = [2, 5, 7, 3, 8,6,3,1,9,]plt.scatter(x, y, color='r', marker='o', s=100, edgecolors='k', alpha=0.8) # 设置散点颜色为红色,形状为圆圈,大小为100,边缘颜色为黑色,透明度为0.8
plt.xlabel('X轴', fontsize=12, color='black')
plt.ylabel('Y轴', fontsize=12, color='black')
plt.title('散点图', fontsize=14, color='black')
plt.grid(True, linestyle='--', color='gray', alpha=0.6)
plt.savefig("../2.png", dpi=300)
plt.show()
4)柱状图绘制
柱状图是一种直观简单的数据可视化工具,适用于比较数据大小、显示数据分布、突出数据特征和比较不同时间点数据等分析需求。代码和运行结果如下图所示:
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus'] = False
# 0,准备数据
# 电影名字 此时输入的为字符串,必须转化为数字,使用range
movie_name = ['雷神3:诸神黄昏', '正义联盟', '东方快车谋杀案', '寻梦环游记', '全球风暴', '降魔传', '追捕', '七十七天', '密战','狂兽', '其它'
]
# 横坐标 len(movie_name)计算了这个字典有多少个元素
x = range(len(movie_name))
# y轴 票房数据
y = [73853, 57767, 22354, 15969, 14839, 8725, 8716, 8318, 7916, 6764, 52222]
# 1,创建画布
plt.figure(figsize=(20, 8), dpi=100)
# 2,绘制图像
y_ticks = range(100000)
plt.bar(x,y,width=0.5,color=['b', 'r', 'g', 'y', 'c', 'm', 'y', 'k', 'c', 'g', 'b'])
# x_ticks_labels = ["{}".format(i) for i in movie_name] # 刻度显示一定要在绘制图像处添加
# plt.xticks(x,x_ticks_labels,fontsize = 15) 由于x和moviename是两个分开的变量,因此,这两种方法都可以实现x轴显示文字功能
# 但是必须记住,plt.xticks()括号里的第一个值必须是数,而不是字符串
plt.xticks(x, movie_name, fontsize=15)
plt.yticks(y_ticks[::10000], fontsize=15)
plt.title('某月各电影票房统计', fontsize=20)
plt.grid()
# 3,图像显示
plt.savefig("../3.png", dpi=300)
plt.show()
5)饼图绘制
饼图是一种简单直观的数据可视化工具,适用于显示数据占比、突出重点、比较数据大小和易于理解传达等分析需求。代码和运行结果如下图所示:
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus'] = False
sizes = [30, 20, 15, 35]
labels = ['A', 'B', 'C', 'D']
colors = ['#ff9999', '#66b3ff', '#99ff99', '#ffcc99'] # 自定义颜色plt.pie(sizes, labels=labels, autopct='%1.1f%%', colors=colors, startangle=90, shadow=True, explode=(0.1, 0, 0, 0)) # 设置颜色、起始角度、阴影、爆炸效果
plt.title('饼图', fontsize=16, color='black') # 设置标题字号为16、颜色为黑色
plt.axis('equal') # 设置饼图为等比例
plt.savefig("../4.png", dpi=300)
plt.show()
6)等高线图绘制
等高线图是一种有效的数据可视化工具,适用于显示数据变化趋势、描绘地形地貌、显示数据分布和计算高度或温度等分析需求。代码和运行结果如下图所示:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus'] = False
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)plt.contourf(X, Y, Z, cmap='coolwarm', levels=20, alpha=0.8)
plt.colorbar(label='值') # 调整颜色条标签名称plt.title('等高线图', fontsize=16, color='black') # 设置标题为黑色、字号大小为16
plt.xlabel('X轴', fontsize=12, color='black') # 设置X轴标签文字为黑色、字号大小为12
plt.ylabel('Y轴', fontsize=12, color='black') # 设置Y轴标签文字为黑色、字号大小为12plt.grid(True, linestyle='--', color='gray', alpha=0.6) # 添加灰色虚线网格
plt.savefig("../5.png", dpi=300)
plt.show()
7)箱线图绘制
箱线图是一种有效的数据可视化工具,适用于展示数据分布、比较数据集、检测异常值和评估数据的稳定性等分析需求。代码和运行结果如下图所示:实现过程解释如下
生成三组随机数据 data1
, data2
, data3
,分别表示均值分别为0、1、2的正态分布随机数据。
创建箱线图对象 fig, ax = plt.subplots()
,其中 fig
为整个图表对象,ax
为坐标轴对象。
box = ax.boxplot([data1, data2, data3], patch_artist=True)
: 使用 boxplot
函数创建一个箱线图,并将数据传递进去。patch_artist=True
表示箱体为矩形。
设置箱体颜色和边框颜色。利用循环和 zip
函数,依次设置每个箱体的颜色、须的颜色、中位线的颜色以及边缘线的颜色。
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus'] = False
# 生成多组随机数据
np.random.seed(10)
data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(1, 1, 100)
data3 = np.random.normal(2, 1, 100)# 创建箱线图
fig, ax = plt.subplots()
box = ax.boxplot([data1, data2, data3], patch_artist=True)# 设置箱体颜色和边框颜色
colors = ['#FF6347', '#FFD700', '#40826D']
for patch, color in zip(box['boxes'], colors):patch.set_facecolor(color)
for whisker, median, cap in zip(box['whiskers'], box['medians'], box['caps']):whisker.set(color='#1f77b4', linewidth=2)median.set(color='#bcbd22', linewidth=2)cap.set(color='#d62728', linewidth=2)# 添加标题和标签
ax.set_title('箱线图', fontsize=14)
ax.set_ylabel('值', fontsize=12)
plt.savefig("../6.png", dpi=300)
plt.show()
8)较为复杂的折线图绘制
这里需要使用数据进行分析,数据链接在网盘中,可以自行下载链接:https://pan.baidu.com/s/1VrFb8a0FmNEBKq9gQq9dPA?pwd=0rrn 提取码:0rrn 。代码和运行结果如下图所示:实现过程解释如下
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei'] #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus']=Falsedata=pd.read_excel('北京市空气质量数据.xlsx')
data=data.replace(0,np.NaN)plt.figure(figsize=(10,5))
plt.plot(data['AQI'],color='black',linestyle='-',linewidth=0.5)
plt.axhline(y=data['AQI'].mean(),color='red', linestyle='-',linewidth=0.5,label='AQI总平均值')
data['年']=data['日期'].apply(lambda x:x.year)
AQI_mean=data['AQI'].groupby(data['年']).mean().values
year=['2014年','2015年','2016年','2017年','2018年','2019年']
col=['red','blue','green','yellow','purple','brown']
for i in range(6):plt.axhline(y=AQI_mean[i],color=col[i], linestyle='--',linewidth=0.5,label=year[i])
plt.title('2014年至2019年AQI时间序列折线图')
plt.xlabel('年份')
plt.ylabel('AQI')
plt.xlim(xmax=len(data), xmin=1)
plt.ylim(ymax=data['AQI'].max(),ymin=1)
plt.yticks([data['AQI'].mean()],['AQI平均值'])
plt.xticks([1,365,365*2,365*3,365*4,365*5],['2014','2015','2016','2017','2018','2019'])
plt.legend(loc='best')
plt.text(x=list(data['AQI']).index(data['AQI'].max()),y=data['AQI'].max()-20,s='空气质量最差日',color='red')
plt.savefig("../6.png", dpi=300)
plt.show()
9)热力图绘制
热力图是一种简单有效的数据可视化工具,可以帮助分析师、研究人员等快速理解数据分布、相关性和异常情况,从而支持更深入的数据分析和决策过程。正方形热力图和三角形热力图代码和运行结果如下图所示:
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus'] = False data_square = np.random.rand(5, 5)# 创建正方形热力图
fig, ax = plt.subplots()
im = ax.imshow(data_square, cmap='viridis')# 显示数据值
for i in range(len(data_square)):for j in range(len(data_square[0])):text = ax.text(j, i, round(data_square[i, j], 2),ha='center', va='center', color='black')# 添加颜色条
plt.colorbar(im)# 设置标题和标签
ax.set_title('热力图', fontsize=14)
plt.savefig("../7.png", dpi=300)
plt.show()
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus'] = False
# 生成上三角形状数据
data_triangle = np.triu(np.random.rand(5, 5))# 创建上三角形热力图
fig, ax = plt.subplots()
im = ax.imshow(data_triangle, cmap='plasma')# 显示数据值
for i in range(len(data_triangle)):for j in range(len(data_triangle[0])):if data_triangle[i, j] != 0:text = ax.text(j, i, round(data_triangle[i, j], 2),ha='center', va='center', color='black')# 添加颜色条
plt.colorbar(im)# 设置标题和标签
ax.set_title('热力图', fontsize=14)
plt.savefig("../8.png", dpi=300)
plt.show()
关于Matplotlib工具包的一些常用的图形绘制分析已经结束,它Python中一个功能强大的数据可视化库,提供了众多丰富的绘图接口,还可以继续更多复杂图形的绘制。
02-Seaborn包的使用示例
Seaborn 是一个基于 Matplotlib 的 Python 数据可视化库,专注于创建具有吸引力和信息丰富度的统计图形。Seaborn 提供了一系列高级数据可视化功能,使得创建各种统计图形变得简单而直观。下面是 Seaborn 包的一些主要特点和功能:
内置数据集:Seaborn 包含一些内置的数据集,如 iris、tips 等,方便用户进行练习和数据可视化。
样式设置:Seaborn 提供了不同的绘图风格和配色方案,可让用户轻松地美化图形。
统计图形:Seaborn 提供了多种常见的统计图形绘制函数,包括散点图、条形图、折线图、箱线图、小提琴图、热力图、联合分布图等。
数据探索:Seaborn 支持直接使用 Pandas 数据框对象进行数据可视化,同时提供了大量参数来定制图形,以便更好地探索数据。
绘制多图:Seaborn 提供了便捷的子图绘制功能,用户可以轻松地创建包含多个子图的复杂布局。
多种图形更新方式:Seaborn 支持通过更新现有图像的方式来创建高级数据分析,如调整图形细节、修改轴标签等。
1)Seaborn导入方式和优势
Seaborn包的导入代码如下:
import matplotlib.pyplot as plt
import seaborn as sns# 设置中文字体和解决符号显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
下面对Matplotlib包中常用的数据可视化图像绘制进行详细分析:
2)热图绘制
这个示例中,首先加载了示例的航班数据集(flights),然后将数据集转换为长格式,并创建了热图(heatmap)。热图是一种用颜色编码数据的可视化方法,通过色彩深浅的变化来表现数据的大小、分布情况等,帮助人们更直观地理解数据。
具体说明:
- 导入必要的库并设置中文字体的显示。
- 加载航班数据集,将长格式数据转换为宽格式,提取乘客数量数据并创建热图。
- 绘制热图,并使用
annot=True
参数在每个单元格中添加数字值,fmt="d"
表示使用整数格式显示。 - 调整热图的样式,包括线宽、颜色映射等,添加标题并调整字体大小。
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus'] = False
sns.set_theme()# 加载示例航班数据集并将其转换为长格式
flights_long = sns.load_dataset("flights")
flights = (flights_long.pivot(index="month", columns="year", values="passengers")
)# 绘制带有每个单元格数字值的热图
plt.figure(figsize=(10, 6))
sns.heatmap(flights, annot=True, fmt="d", linewidths=.5, cmap="YlGnBu")# 添加标题和调整字体大小
plt.title('heat map ', fontsize=16)
plt.xlabel("year", fontsize=12)
plt.ylabel("month", fontsize=12)# 显示颜色条
plt.savefig("../11.png", dpi=300)
# 展示图像
plt.show()
3)密度图绘制
下面的示例代码绘制了一个美化后的花萼长度密度图。各部分代码解释如下:
data = sns.load_dataset('iris')
: 加载 Seaborn 内置的 iris 数据集。
sns.kdeplot(data=data['sepal_length'], shade=True, color='skyblue', linewidth=3, alpha=0.7)
: 绘制密度图,设置为填充阴影(shade=True),线条颜色为天蓝(skyblue),线宽为3,透明度为0.7。
plt.title('花萼长度密度图', fontsize=16, fontproperties='SimHei')
: 设置图的标题为“花萼长度密度图”,字体大小为16,中文字体为宋体。
plt.xlabel('花萼长度', fontsize=12, fontproperties='SimHei')
和 plt.ylabel('密度', fontsize=12, fontproperties='SimHei')
: 设置横轴和纵轴的标签,字体大小为12,中文字体为宋体。
plt.gca().set_facecolor('lavender')
: 设置图的背景颜色为薰衣草色。
import matplotlib.pyplot as plt
import seaborn as sns# 设置中文字体和解决符号显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 创建数据集
data = sns.load_dataset('iris')# 绘制密度图,并设置样式
sns.kdeplot(data=data['sepal_length'], shade=True, color='skyblue', linewidth=3, alpha=0.7)
plt.title('花萼长度密度图', fontsize=16, fontproperties='SimHei')
plt.xlabel('花萼长度', fontsize=12, fontproperties='SimHei')
plt.ylabel('密度', fontsize=12, fontproperties='SimHei')# 设置背景颜色
plt.gca().set_facecolor('lavender')# 显示网格线
plt.grid(True, linestyle='--', linewidth=0.5)
plt.savefig("../12.png", dpi=300)
plt.show()
4)小提琴图绘制
小提琴图通过展示不同种类或组内数据的分布情况,可以帮助观察者更直观地了解数据的密度分布、中位数、四分位数等统计特征,具有以下几个作用:
比较不同组内数据分布:小提琴图可以同时展示多组数据的分布情况,让观察者一目了然地比较不同组之间的数据密度、变化情况。
显示集中趋势和离散程度:小提琴图的宽度表示数据的密度,高度代表数据值的频率,观察者可以从图形的形状中大致了解数据的集中趋势和离散程度。
识别异常值:在小提琴图中,异常值往往以离群的数据点形式呈现,容易被观察者发现,可以帮助进一步分析异常情况。
展示整体分布形态:通过小提琴图的形状、对称性或不对称性等特征,可以推测整体数据的分布形态是正态分布、偏态分布还是其它分布类型。
下面这段代码示例展示了如何绘制花萼长度对不同鸢尾花种类的分布情况,以展示鸢尾花不同种类(species)的花萼长度(sepal_length)分布情况。以下是代码的详细解释:
加载数据集:使用 sns.load_dataset('iris')
加载内置的鸢尾花数据集。
设置图形样式:使用 sns.set_style('whitegrid')
将图形风格设置为白色网格风格。使用 sns.set_context('notebook', font_scale=1.5)
设置图形大小和字体大小。
绘制小提琴图并添加样式:创建一个大小为 (12, 8) 的图形。使用 sns.violinplot()
绘制小提琴图,横轴为花的种类(species),纵轴为花萼长度(sepal_length),颜色使用 ‘husl’ 调色板,线宽为2,内部显示四分位数。添加图标题 ‘花萼长度小提琴图’,横坐标标签 ‘花的种类’,纵坐标标签 ‘花萼长度’。
添加具体数据点:使用 sns.swarmplot()
添加数据点,横轴为花的种类,纵轴为花萼长度,颜色为黑色,点的大小为8。
样式调整:使用 sns.despine(left=True)
移除左侧轴线。打开网格线显示,并设置线型为虚线,宽度为0.5。使用 plt.tight_layout()
自动调整布局。
import matplotlib.pyplot as plt
import seaborn as sns# 设置中文字体和解决符号显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 创建数据集
data = sns.load_dataset('iris')# 设置图形样式
sns.set_style('whitegrid') # 设置图形风格为白色网格
sns.set_context('notebook', font_scale=1.5) # 设置图形大小和字体大小# 绘制小提琴图并添加更多样式
plt.figure(figsize=(12, 8)) # 设置图形大小
sns.violinplot(x='species', y='sepal_length', data=data, palette='husl', linewidth=2, inner='quartile')
plt.title('花萼长度小提琴图', fontsize=20, fontproperties='SimHei')
plt.xlabel('花的种类', fontsize=16, fontproperties='SimHei')
plt.ylabel('花萼长度', fontsize=16, fontproperties='SimHei')# 显示均值线
sns.despine(left=True) # 移除左侧轴线
sns.swarmplot(x='species', y='sepal_length', data=data, color='black', size=8) # 添加数据点plt.grid(True, linestyle='--', linewidth=0.5) # 显示网格线
plt.tight_layout() # 自动调整布局
plt.savefig("../13.png", dpi=300)
plt.show()
5)聚类图绘制
下面这段代码示例展示了展示数据集中不同特征之间的相关性,绘制聚类图时,实际上是在展示数据集中不同特征之间的相关性,通过绘制一个热度图并进行层次聚类(hierarchical clustering)来呈现数据的结构。
具体来说,对于代码中绘制的鸢尾花数据集(iris data),我们首先计算了数据的相关系数矩阵(correlation matrix),矩阵中的每个元素表示了数据中两个特征之间的相关性程度,取值范围一般为-1到1。然后,基于这个相关系数矩阵,我们绘制了热度图(heat map),使用颜色来表示相关性的强度,通常颜色越深表示相关性越强。
在热度图的基础上,进行了层次聚类,将数据集中的特征(花瓣长度、花瓣宽度、花萼长度、花萼宽度)进行分组,形成具有层次结构的聚类结果,这有助于发现数据中的潜在模式和结构。
下图为代码运行结果,鸢尾花数据聚类图,具体代码如下:
import matplotlib.pyplot as plt
import seaborn as sns
# 设置中文字体和解决符号显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据集
data = sns.load_dataset('iris')# 绘制聚类图,并调整样式
plt.figure(figsize=(10, 8)) # 设置图形大小
cluster = sns.clustermap(data.corr(), annot=True, cmap="viridis", linewidths=0.5) # 设置颜色映射为"viridis"
plt.suptitle('鸢尾花数据聚类图', x=0.5, y=1.02, fontsize=16, fontweight='bold') # 更改标题为中文,并居中放置
plt.setp(cluster.ax_heatmap.yaxis.get_majorticklabels(), rotation=0) # 旋转y轴标签# 显示聚类图
plt.savefig("../cluster_map.png", dpi=300) # 保存图像为cluster_map.png
plt.show()
6)分面网格图绘制
下面这段代码示例使用Seaborn库绘制一个分面网格图(Pair Plot),分面网格图是一种直观、多变量展示的数据可视化方法,对于理解数据特征之间的关系和分类情况非常有帮助。
分面网格图的作用:
显示多变量关系:分面网格图展示了数据集中每对特征之间的关系,可以帮助分析师一次性观察多个变量间的相关性。
分类观察:通过区分不同种类的数据点并用不同颜色表示,可以更清晰地观察不同类别数据间的差异和关系。
探索性分析:分面网格图是一种探索性数据分析方法,有助于发现数据集中的模式、异常值或潜在规律,为后续数据挖掘和建模提供基础。
代码解释如下:
加载了鸢尾花(iris)数据集,包含花瓣长度、花瓣宽度、花萼长度、花萼宽度和鸢尾花种类等信息。
通过 sns.pairplot()
绘制了分面网格图,展示了数据集中不同特征两两之间的关系。用不同颜色和标记(markers)区分了三种鸢尾花的种类,并使用调色板(palette)“husl”为每个种类选择一种颜色。
使用 plt.suptitle()
设置了图的总标题为“分面网格图”,并调整了标题的字体大小和位置。
通过 plt.xlabel()
和 plt.ylabel()
修改了x轴和y轴的标签为中文,并设置了字体大小。
使用 plt.legend()
对图例进行调整,将图例改为中文,并设置了对应标记物种类名和字体大小。
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus'] = False
# 加载 iris 数据集
data = sns.load_dataset('iris')# 使用 Seaborn 绘制分面网格图
plt.figure(figsize=(15, 10))
sns.pairplot(data, hue='species', markers=["o", "s", "D"], palette="husl")# 设置标题和图例
plt.suptitle('分面网格图', fontsize=16, y=1.02)
plt.legend(title='种类', title_fontsize='13', loc='upper right')# 修改轴标签为中文plt.xlabel("花瓣长度", fontsize=12)
plt.ylabel("花瓣宽度", fontsize=12)# 修改图例为中文
plt.legend(['山鸢尾', '变色鸢尾', '维吉尼亚鸢尾'], prop={'size': 12})# 显示图像
plt.savefig("../10.png", dpi=300)
plt.show()
7)带有误差带的时间序列图绘制
带有误差带的时间序列图可以显示数据点的变化范围,帮助观察数据的波动情况。误差带通常表示数据的置信区间或标准差范围,从而提供了关于数据点可靠性和稳定性的信息。通过观察误差带的宽度和位置,可以更准确地理解数据点的集中趋势和变化程度。误差带的添加可以使图表更具信息量,有助于更好地理解数据的特征和趋势。
下面给出一个示例,具体分析该类图形的绘制过程:
这个示例代码使用了 Seaborn 库和 Matplotlib 库来创建一个带有误差带的时间序列图。首先通过 Seaborn 的 load_dataset
方法加载了一个名为 “fmri” 的示例数据集,其中包含了关于神经影像学(fMRI)实验中信号的长格式数据。然后使用 Seaborn 的 lineplot
函数通过 x="timepoint"
, y="signal"
, hue="region"
, style="event"
参数来绘制了不同事件和区域的响应时间序列图。
接下来使用 Matplotlib 的 savefig
方法来保存这个生成的图像为名为 “14.png” 的文件,并设置了 dpi 参数为 300,以提高图像的分辨率。
这个示例的作用是通过可视化展示不同事件和区域的响应随时间的变化趋势,并且添加了误差带来表示数据的不确定性。通过观察图中的线条和误差带,可以更清楚地了解实验数据的分布和波动情况,帮助分析数据的稳定性和可靠性。保存图像可以方便后续的数据分析或报告展示。
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="darkgrid")# Load an example dataset with long-form data
fmri = sns.load_dataset("fmri")# Plot the responses for different events and regions
plot = sns.lineplot(x="timepoint", y="signal",hue="region", style="event",data=fmri)
plt.savefig("../14.png", dpi=300)
8)Seaborn使用Pandas数据框数据可视化
可以通过以下代码示例来演示 Seaborn 支持使用 Pandas 数据框对象进行数据可视化的过程:这段代码创建了一个简单的 Pandas 数据框 df
,其中包含了 x、y 两列数值数据和一个分类列 category。然后使用 Seaborn 的 scatterplot
函数将数据框中的数据可视化成散点图,根据分类列 category 对数据点进行着色。最后,通过 Matplotlib 绘制出图形并显示出来。
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd# 创建一个示例的 Pandas 数据框
data = {'x': [1, 2, 3, 4, 5],'y': [4, 5, 6, 7, 8],'category': ['A', 'B', 'A', 'B', 'A']
}
df = pd.DataFrame(data)# 使用 Seaborn 可视化数据
sns.set_theme(style="darkgrid")
plot = sns.scatterplot(data=df, x='x', y='y', hue='category')# 添加标题和标签
plt.title('Scatter Plot of Data')
plt.xlabel('X values')
plt.ylabel('Y values')plt.show()
9)Seaborn绘制多个图
在这个示例中,首先生成了正弦和余弦函数的一些随机数据。然后通过 plt.subplots(2, 1)
创建了一个包含 2 个子图的 Figure 对象,并指定了图形的大小。我们使用 Seaborn 的 lineplot
函数在第一个子图上绘制正弦函数,在第二个子图上绘制余弦函数。最后,调整布局并显示包含两个子图的图形。
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus'] = False
# 生成一些随机数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)# 创建 Figure 和 Axes 对象
fig, axes = plt.subplots(2, 1, figsize=(8, 6))# 在第一个子图上绘制数据
sns.lineplot(x=x, y=y1, ax=axes[0])
axes[0].set_title('正弦函数')# 在第二个子图上绘制数据
sns.lineplot(x=x, y=y2, ax=axes[1])
axes[1].set_title('余弦函数')# 调整布局
plt.tight_layout()plt.show()
10)具有边际分布的Hexbin图绘制
具有边际分布的 Hexbin 图在数据可视化中具有以下作用:
显示散点分布和边缘分布:Hexbin 图将散点数据以六边形的形式呈现,可以直观地展示数据的分布情况,同时在图的边缘展示了 X 和 Y 轴上的边缘分布,有助于全面理解数据的结构和分布。
展现密度信息:通过颜色的深浅变化或六边形的大小变化,Hexbin 图展示了不同区域的数据点密度情况,可以帮助快速识别数据点的聚集程度和分布情况。
探索相关性:Hexbin 图不仅可以展示单变量的分布情况,也可以通过点的密度和分布情况来探索两个变量之间的相关性。密集的六边形区域可能表示变量之间存在一定的关联性。
呈现大量数据:对于大数据集,Hexbin 图可以有效地将大量数据点聚合并展示,避免了传统散点图在数据点重叠时的重合问题,让数据更具可读性。
下面给出一个示例,分析该类图形的使用过程,代码如下:
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="ticks")rs = np.random.RandomState(11)
x = rs.gamma(2, size=1000)
y = -.5 * x + rs.normal(size=1000)sns.jointplot(x=x, y=y, kind="hex", color="#4CB391")
plt.savefig("../17.png", dpi=500)
总结
综合上述分析,Matplotlib 是一个功能强大但比较底层的绘图库,适合绘制各种类型的图形和进行定制化操作;而 Seaborn 则是一个专注于统计数据可视化的高阶库,提供了更方便的统计图表创建和美化功能。当然,这里仅仅只是一部分常用的可视化分析图像,还可以绘制各种复杂的图像,如果需要,可以在官网查看。欢迎大家多多支持!