[机器学习-02] 数据可视化神器:Matplotlib和Seaborn工具包实战图形大全

目录

引言        

正文        

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博客

c1b47828028642e59cb81b6df5f83aab.png

 

正文        

        在实际应用中,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()

896ee571042649c19718baaa6ab7d2bd.png

        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()

7c0d6e2d79194530bd5bfff9127da5fa.png

        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()

fda12eea1a1e425b86ed2385d0b5837c.png

        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()

e92f1b7ff887473bb37fbaf115649477.png

        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()

0e21892eff0e41c5af6b4a2dd6b443ed.png

        7)箱线图绘制

        箱线图是一种有效的数据可视化工具,适用于展示数据分布、比较数据集、检测异常值和评估数据的稳定性等分析需求。代码和运行结果如下图所示:实现过程解释如下

        生成三组随机数据 data1data2data3,分别表示均值分别为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()

669edfa4b86a465ca4339a73201e3a4c.png

        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()

 6c3bbf356fc74513bd3f854ac2a960be.png

        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()

2bf5ae0021c74715bd21d73f1bc1b446.png

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()

b83f84a911aa4ddb929819d4169ef20d.png

        关于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)。热图是一种用颜色编码数据的可视化方法,通过色彩深浅的变化来表现数据的大小、分布情况等,帮助人们更直观地理解数据。

        具体说明:

  1. 导入必要的库并设置中文字体的显示。
  2. 加载航班数据集,将长格式数据转换为宽格式,提取乘客数量数据并创建热图。
  3. 绘制热图,并使用 annot=True 参数在每个单元格中添加数字值,fmt="d" 表示使用整数格式显示。
  4. 调整热图的样式,包括线宽、颜色映射等,添加标题并调整字体大小。
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 则是一个专注于统计数据可视化的高阶库,提供了更方便的统计图表创建和美化功能。当然,这里仅仅只是一部分常用的可视化分析图像,还可以绘制各种复杂的图像,如果需要,可以在官网查看。欢迎大家多多支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/7109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7zip如何只压缩文件不带上级目录?

在使用7zip进行文件压缩的时候,如果直接选择要压缩的文件进行压缩,得到的压缩包则会多包含一层顶层目录,解压缩之后需要点击两次才能进入到实际目录中,为了解决这个问题,本文根据探索找到了一种解决办法。 如下是一个演…

表空间的概述

目录 表空间的属性 表空间的类型 永久性表空间(PermanentTablespace) 临时表空间(Temp Tablespace ) 撤销表空间(Undo Tablespace) 大文件表空间(BigfileTablespace) 表空间的状态 联机状态(Online) 读写状态(Read Write) 只读状态(Read) 脱机状态(Offline) Oracle从…

Java_从入门到JavaEE_09

一、构造方法/构造器 含义:和new一起是创建对象的功能 特点: 与类名相同的方法没有返回项 注意: 当类中没有写构造方法时,系统会默认添加无参构造(无参数的构造方法)构造方法可以重载的 有参构造好处&…

透明加密软件选哪个好?选择时一定要注意以下三点

透明加密软件哪个好? 这是许多企事业单位在面临数据防泄漏问题时经常思考的问题。随着信息技术的发展,企业的数据安全变得越来越重要。透明加密技术作为一种有效的数据保护手段,被越来越多的企业所采用。然而,市场上的透明加密软…

Django高级表单处理与验证实战

title: Django高级表单处理与验证实战 date: 2024/5/6 20:47:15 updated: 2024/5/6 20:47:15 categories: 后端开发 tags: Django表单验证逻辑模板渲染安全措施表单测试重定向管理最佳实践 引言: 在Web应用开发中,表单是用户与应用之间进行交互的重要…

OpenHarmony实战开发-请求自绘制内容绘制帧率

对于基于XComponent进行Native开发的业务,可以请求独立的绘制帧率进行内容开发,如游戏、自绘制UI框架对接等场景。 接口说明 开发步骤 说明: 本范例是通过Drawing在Native侧实现图形的绘制,并将其呈现在NativeWindow上 1.定义Ark…

《第一行代码》第二版学习笔记(7)——使用通知和摄像头

文章目录 一、使用通知二、调用摄像头 介绍了通知基于8.0的使用方法和如何调用摄像头拍照 一、使用通知 public void onClick(View v) {if (v.getId() R.id.send_notice){Intent intent new Intent(this,NotificationActivity.class);PendingIntent pi PendingIntent.getAct…

【哈希表】Leetcode 14. 最长公共前缀

题目讲解 14. 最长公共前缀 算法讲解 我们使用当前第一个字符串中的与后面的字符串作比较,如果第一个字符串中的字符没有出现在后面的字符串中,我们就直接返回;反之当容器中的所有字符串都遍历完成,说明所有的字符串都在该位置…

springcloud第4季 springcloud-alibaba之分布式事务seata

一 seata介绍 1.1 seata介绍 1.seata是一款解决分布式事务的解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 2.seata的几种术语:一个中心:全局事务id TC(Transaction Coordinator):事务协调者。负责维护全局和分…

通过iMock学习Jvmsandbox

Jvm-sandbox Jvm-sandbox基于Jvm-sandbox的Mock平台iMockiMock的工程学习iMock怎么写的(sandbox的module应该怎么写) Jvm-sandbox Jvm-sandbox是阿里开源的一款java的沙箱,看网上的介绍在沙箱里你可以做你能想到的奇妙的事情。 基于Jvm-san…

JavaScript百炼成仙自学笔记——16

HTML: 是什么?HyperText Markup Language 既超文本标记语言(www的描述语言) 既平常上网时所看到的网页 为什么?把存放在一台计算机中的文本或是图形与另一台计算机中的文本或图形方便的联系在一起,形成…

Python turtle库 实现 随机彩色文字平面批量输出

# -*- coding: utf-8 -*- """ Spyder Editor This is a temporary script file. """ import turtle import random import turtle as t t.colormode(255) turtle.bgcolor("white") h255 l50#字号 m60#间隔 n500 t.penup() turtle.hide…

redis进阶--IDEA环境

目录 一、解决redis服务器端口问题 二、java环境下使用redis 三、javaSpringt环境下使用redis 四、redis持久化 1、持久化概念 2、redis持久化策略 3、RDB策略 4、AOF策略 5、混合持久化策略 五、redis事务 1、数据库事务 2、redis事务特点 3、redis事务的作用 4…

在模方中已经选好水岸线了,但是点处理瓦块的时候还是提示水岸线没选

答:能部分位置不闭合,双击右键闭合一下,可以强行闭合缺口。 模方是一款针对实景三维模型的冗余碎片、水面残缺、道路不平、标牌破损、纹理拉伸模糊等共性问题研发的实景三维模型修复编辑软件。模方4.1新增自动单体化建模功能,支持…

[UDS][OTA] 自定义 IntelHEX (IHEX) format read/write library in C

参考修改 参考github的MIT协议开源项目 ihex 改写的代码 https://gitee.com/liudegui/intelhex-c 修改点: 修改Makefile脚本,支持x86_X64平台和aarch64平台将默认读取行长度设置为16位删除与ihex和bin之间的转换无关的示例代码 十六进制描述 HEX格式…

车牌检测识别功能实现(pyqt)

在本专题前面相关博客中已经讲述了 pyqt + yolo + lprnet 实现的车牌检测识别功能。带qt界面的。 本博文将结合前面训练好的模型来实现车牌的检测与识别。并用pyqt实现界面。最终通过检测车牌检测识别功能。 1)、通过pyqt5设计界面 ui文件如下: <?xml version="1…

TC3xx MTU概述(2)

目录 1.概述 2.如何配置NDT 3.小结 1.概述 上篇TC3xx MTU概述(1)-CSDN博客我们讲解了MTU基本功能和MBIST基本概念&#xff0c;接下来我们继续讲解MTU如何配置NDT算法。 2.如何配置NDT 前面聊了那么多概念&#xff0c;我们还是来看看如何配置MTU来实现NDT。 MTU寄存器分为…

liunx服务器部署Llama2大模型

模型&#xff1a;Llama2-chat-13B-Chinese-50W 01 下载安装 Llama2 模型 Huggingface在国内是访问不了的&#xff0c;需要使用代理。在这里推荐使用 clash-for-liunx 配置代理。 安装 git-lfs&#xff0c;用于大文件下载 sudo apt-get install git-lfs git lfs installHuggi…

Transformer 解析 超级详细版

推荐学习视频 汉语自然语言处理-从零解读碾压循环神经网络的transformer模型(一)- 注意力机制-位置编码-attention is all you need_哔哩哔哩_bilibili 目录 首先下transformer和LSTM的最大区别是什么&#xff1f; 1.positional \ encoding, 即位置嵌入(或位置编码); 2 自注…

AI神助攻!小白也能制作自动重命名工具~

我们平时从网上下载一些文件&#xff0c;文件名很多都是一大串字母和数字&#xff0c;不打开看看&#xff0c;根本不知道里面是什么内容。 我想能不能做个工具&#xff0c;把我们一个文件夹下面的所有word、excel、ppt、pdf文件重命名为文件内容的第一行。 我们有些朋友可能不会…