当前位置:首页 » 《随便一记》 » 正文

100天精通Python(可视化篇)——第82天:matplotlib绘制不同种类炫酷散点图参数说明+代码实战(二维散点图、三维散点图、散点图矩阵)

21 人参与  2023年04月07日 10:05  分类 : 《随便一记》  评论

点击全文阅读


文章目录

专栏导读0. 前言1. 参数说明2. 两主特征:二维散点图1)普通散点图2)文字标签散点图3)带颜色映射的散点图4)ArcGIS散点图5)气泡图6)分类散点图7)线性拟合散点图8)分类+线性拟合散点图 3. 三主特征:三维散点图1)三维散点图2)三维分类散点图3)三维波浪分类散点图4)旋转效果动图展示 4. 多主特征:二维散点图矩阵1)二维散点图矩阵2)二维分类散点图矩阵 书籍推荐(包邮送书5本)书籍推荐

专栏导读

??本文已收录于《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的不断进阶深入,后续还有实战项目,轻松应对面试,专栏订阅地址:https://blog.csdn.net/yuan2019035055/category_11466020.html

优点:订阅限时9.9付费专栏进入千人全栈VIP答疑群,作者优先解答机会(代码指导、远程服务),群里大佬众多可以抱团取暖(大厂内推机会)专栏福利:简历指导、招聘内推、每周送实体书、80G全栈学习视频、300本IT电子书:Python、Java、前端、大数据、数据库、算法、爬虫、数据分析、机器学习、面试题库等等
在这里插入图片描述
在这里插入图片描述

0. 前言

散点图(Scatterplot)是一种数据可视化图,用于将两个或更多维度的数据图像化,用不同大小和形状的点表示各自的数据集。它们通常用于表示两个变量之间的相互关系,并在分析异常值时非常有用。散点图的性质使其能够探究两个变量之间的关联性,还可以制作回归线或非线性回归图来查看数据之间的趋势。

在这里插入图片描述

特点:散点图提供了相当强大的数据可视化功能,它允许我们研究变量之间的关联性、可视化显著性空间、挖掘任何趋势或模式以及识别异常情况。

应用场景:散点图可用于研究由两个或更多变量组成的多元统计分析。它们通常用于计算两个变量之间的相关性,有助于发现事物间的联系。举例而言,我们可以用散点图来研究婴儿出生体重与出生时期长度之间的联系,以及哪些市场因素(如季节性变化、价格变化等)可能影响销售额等等。

1. 参数说明

matplotlib绘制散点图的函数是scatter(),以下是函数代码和参数说明大全:

import matplotlib.pyplot as pltplt.scatter(x,            y,            s=None,            c=None,            marker=None,            cmap=None,            norm=None,            vmin=None,            vmax=None,            alpha=None,            linewidths=None,            edgecolors=None,            plotnonfinite=False,            data=None,            **kwargs            )

参数说明

x, y:散点图的x和y坐标数据,可以是数组、列表或者Series类型。s:散点的大小。可以是一个标量,也可以是与x、y等长度相���的数组。c:散点的颜色。可以是一个表示颜色的字符串,也可以是一个与x、y等长度相同的数组。marker:散点的形状。可以是一个表示形状的字符串,例如'o'、'+'、'x'等,也可以是一个自定义的MarkerStyle对象。cmap:颜色映射。如果c参数是一个数组,则可以使用cmap参数指定颜色映射,例如'viridis'、'cool'等。norm:颜色映射的归一化方式。可以是matplotlib.colors.Normalize对象,也可以是自定义的归一化函数。vmin, vmax:颜色映射的最小值和最大值。alpha:散点的透明度。可以是一个标量,也可以是与x、y等长度相同的数组。linewidths:散点的边框宽度。edgecolors:散点的边框颜色。label:散点的标签,用于在图例中显示。zorder:散点的层级,用于控制散点的绘制顺序。hatch:散点的填充样式。picker:指定散点的选中方式,例如'pick_event'表示使用pick事件选中散点。plotnonfinite:指定是否绘制非有限数据。data:散点的数据源。**kwargs:其他可选参数,例如color、size、facecolors等。

以上是scatter()函数的参数说明,可以根据需要灵活使用。

2. 两主特征:二维散点图

**二维散点图是一种用于展示二维数据点分布情况的图表类型。**它将每个数据点表示为平面上的一个点,通常使用不同的符号或颜色来区分不同的数据类别或属性。二维散点图可以用于分析数据的聚集性、离散程度、异常点等特征,是数据可视化中常用的一种方法。

1)普通散点图

首先,我们使用 NumPy 库生成了两个长度为 50 的随机数组 x 和 y。然后,我们使用 matplotlib 的 scatter() 函数绘制散点图。最后,我们使用 show() 函数显示图像。

import matplotlib.pyplot as pltimport numpy as np# 生成数据x = np.random.rand(50)y = np.random.rand(50)# 绘制散点图plt.scatter(x, y)# 显示图像plt.show()

运行结果
在这里插入图片描述

2)文字标签散点图

首先,使用scatter函数绘制散点图,将x轴和y轴的数据传递给它。然后,使用text函数添加标签。text函数需要传递标签的x和y坐标,以及标签的文本。这个散点图展示了一些数据点,每个点都有一个标签。通过这个图,我们可以很容易地看出每个点的位置和标签,更直观地理解数据。下面是一个示例代码:

import matplotlib.pyplot as plt# 数据x = [1, 2, 3, 4, 5]y = [2, 4, 5, 7, 8]labels = ['A', 'B', 'C', 'D', 'E']# 绘制散点图plt.scatter(x, y)# 添加标签for i, label in enumerate(labels):    plt.text(x[i], y[i], label)# 显示图形plt.show()

运行结果
在这里插入图片描述

3)带颜色映射的散点图

首先使用numpy.random.randn函数生成500个生成随机数据样本,每个样本有2个特征。同时,使用numpy.random.randn函数生成500个特征值。

绘制带颜色映射的散点图:使用matplotlib.pyplot.subplots函数创建一个子图,并使用scatter函数绘制散点图。其中,c参数指定颜色映射的值,cmap参数指定颜色映射的颜色范围。同时,使用grid函数添加网格线,使用set_xlabel和set_ylabel函数设置坐标轴标签。添加颜色条:使用legend_elements函数生成颜色条,使用legend函数添加颜色条并设置标题和位置。
import numpy as npimport matplotlib.pyplot as plt# 生成随机数据np.random.seed(0)n_samples = 500x = np.random.randn(n_samples, 2)colors = np.random.randn(n_samples)# 绘制带颜色映射的散点图fig, ax = plt.subplots(figsize=(8, 8))scatter = ax.scatter(x[:, 0], x[:, 1], c=colors, cmap='cool')ax.grid(True)ax.set_xlabel('X')ax.set_ylabel('Y')# 添加颜色条legend1 = ax.legend(*scatter.legend_elements(),                    loc="upper right", title="Values")ax.add_artist(legend1)plt.show()

运行结果
在这里插入图片描述

4)ArcGIS散点图

ArcGIS散点图是一种常见的数据可视化方式,可以帮助我们更好地理解数据之间的关系。使用matplotlib可以轻松绘制出漂亮的ArcGIS散点图,并且可以对图像进行进一步的解释。下面是一个简单的例子,展示如何使用matplotlib绘制ArcGIS散点图:

import matplotlib.pyplot as pltimport numpy as np# 生成随机数据x = np.random.rand(100)y = np.random.rand(100)z = np.random.rand(100) * 100# 绘制散点图plt.figure(figsize=(8, 6))plt.scatter(x, y, c=z, cmap='cool', alpha=0.8)# 添加标题和标签plt.title('ArcGIS Scatter Plot')plt.xlabel('X')plt.ylabel('Y')plt.colorbar()plt.show()

运行结果
在这里插入图片描述

5)气泡图

气泡图是一种散点图,其中每个数据点用一个圆圈表示,并且圆圈的大小表示第三个变量的值。气泡图通常用于显示多个变量之间的关系。我们使用 NumPy 库生成了三个长度为 50 的随机数组 x、y 和 z,其中 z 表示圆圈的大小。然后,我们使用 scatter() 函数绘制气泡图,并将 z 用作圆圈的大小。最后,我们使用 show() 函数显示图像。

import matplotlib.pyplot as pltimport numpy as np# 生成数据x = np.random.rand(50)y = np.random.rand(50)z = np.random.rand(50) * 1000# 绘制气泡图plt.scatter(x, y, s=z)# 显示图像plt.show()

运行结果
在这里插入图片描述

6)分类散点图

我们使用 numpy 库生成了两组长度为 50 的随机数组 x1、y1 和 x2、y2。然后,我们使用 plt.scatter() 函数绘制两组散点图,并添加标签。接着,我们使用 plt.legend() 函数添加图例。最后,我们使用 plt.xlabel()、plt.ylabel() 和 plt.title() 函数添加标签和标题。最终,我们使用 plt.show() 函数显示图像。

import numpy as npimport matplotlib.pyplot as plt# 生成数据x1 = np.random.rand(50)y1 = np.random.rand(50)x2 = np.random.rand(50)y2 = np.random.rand(50) + 1# 绘制散点图plt.scatter(x1, y1, label='Group 1')plt.scatter(x2, y2, label='Group 2')# 添加图例plt.legend()# 添加标签和标题plt.xlabel('x')plt.ylabel('y')plt.title('Grouped Scatter Plot')# 显示图像plt.show()

运行结果
在这里插入图片描述

7)线性拟合散点图

线性拟合散点图是一种常见的数据可视化方式,用于表示两个变量之间的关系。其中,横轴表示自变量,纵轴表示因变量,每个点代表一组数据。通过对散点进行线性拟合,可以得到一条直线,该直线能够较好地拟合数据点,反映出自变量和因变量之间的趋势关系。

线性拟合散点图广泛应用于科学研究、商业分析等领域。通过观察散点图,我们可以发现自变量和因变量之间的关系是否存在,以及关系的强度和方向。通过线性拟合,我们可以更加准确地描述这种关系,预测未来的趋势和结果,并作出相应的决策。

import numpy as npimport matplotlib.pyplot as pltfrom scipy import stats# 生成数据x = np.random.rand(50)y = 2 * x + 1 + np.random.randn(50) * 0.2# 绘制散点图plt.scatter(x, y)# 计算线性回归的斜率、截距和 R-squared 值slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)# 绘制拟合直线plt.plot(x, slope * x + intercept, color='r')# 添加标签和标题plt.xlabel('x')plt.ylabel('y')plt.title('Linear Regression')# 显示图像plt.show()

运行结果
在这里插入图片描述

8)分类+线性拟合散点图

分类+线性拟合散点图是一种常见的数据可视化方式,可以用来展示两个变量之间的关系:

import matplotlib.pyplot as pltimport numpy as np# 生成随机数据np.random.seed(42)x = np.random.randint(1, 6, size=20)y = np.random.normal(0, 1, size=20)group = np.random.choice(['A', 'B'], size=20)# 计算每组的均值和标准差groups = np.unique(group)means = [np.mean(y[group == g]) for g in groups]stds = [np.std(y[group == g]) for g in groups]# 绘图fig, ax = plt.subplots()for g in groups:    ax.scatter(x[group == g], y[group == g], label=g)# 添加线性拟合for g in groups:    x_g = x[group == g]    y_g = y[group == g]    z = np.polyfit(x_g, y_g, 1)    p = np.poly1d(z)    ax.plot(x_g, p(x_g), '--', color='gray')# 添加误差线ax.errorbar(np.arange(1, len(groups)+1), means, yerr=stds, fmt='none', color='black', capsize=5)# 设置图形属性ax.set_xlabel('X')ax.set_ylabel('Y')ax.set_xticks(np.arange(1, len(groups)+1))ax.set_xticklabels(groups)ax.legend()plt.show()

解释:

首先,我们使用numpy生成了一些随机数据,包括20个x值、20个y值和20个分组(A或B)。然后,我们计算了每个分组的均值和标准差,以便后面添加误差线。接着,我们创建了一个matplotlib图形对象,包括一个坐标轴对象ax。我们使用循环遍历每个分组,将它们的x值和y值绘制成散点图,并添加标签。我们使用另一个循环,为每个分组添加线性拟合线,以展示x和y之间的趋势。最后,我们添加误差线、设置图形属性(包括x轴标签、y轴标签、x轴刻度标签、图例等),并显示图形。

这样,我们就可以使用matplotlib绘制好看的分组+线性拟合散点图了。这种图形可以让我们更直观地了解两个变量之间的关系,并展示不同分组之间的差异。

运行结果
在这里插入图片描述

3. 三主特征:三维散点图

三维散点图是一种常见的数据可视化方式,用于表示三个变量之间的关系。其中,横轴、纵轴和深度轴分别表示三个变量,每个点代表一组数据。通过对散点进行可视化,可以直观地观察三个变量之间的关系,发现其中的规律和趋势。

1)三维散点图

3D 散点图是一种显示三个变量之间关系的图表。每个数据点用一个点表示,并且其位置取决于三个变量的值:

import matplotlib.pyplot as pltimport numpy as npfrom mpl_toolkits.mplot3d import Axes3D# 生成数据x = np.random.rand(50)y = np.random.rand(50)z = np.random.rand(50)# 绘制 3D 散点图fig = plt.figure()ax = fig.add_subplot(111, projection='3d')ax.scatter(x, y, z)# 显示图像plt.show()

运行结果
在这里插入图片描述

2)三维分类散点图

以下是一个基于matplotlib绘制好看的三维分类散点图的示例代码及其说明:

import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3D# 生成数据num = 200X = np.random.randn(num, 3)y = np.random.randint(0, 3, num)# 创建3D图像fig = plt.figure()ax = fig.add_subplot(111, projection='3d')# 设置颜色列表colors = ['r', 'g', 'b']# 绘制散点图for i in range(3):    ax.scatter(X[y==i, 0], X[y==i, 1], X[y==i, 2], c=colors[i], label='Class %d' % i)# 设置图像标题和坐标轴标签ax.set_title('3D Scatter Plot')ax.set_xlabel('X')ax.set_ylabel('Y')ax.set_zlabel('Z')# 添加图例ax.legend()# 显示图像plt.show()

代码说明

首先,生成200个三维数据点X和它们的类别标签y,类别标签取值为0、1、2。然后,创建一个3D图像,其中projection参数设置为'3d'表示创建一个三维图像。定义一个颜色列表colors,用来表示不同类别的颜色。接着,使用for循环遍历每个类别,对于每个类别,使用ax.scatter()方法绘制散点图。其中,X[y==i, 0]表示取出类别为i的所有数据点在X坐标轴上的值,X[y==i, 1]和X[y==i, 2]分别表示在Y和Z坐标轴上的值。c参数设置为colors[i],表示使用颜色列表中第i个颜色来绘制该类别的数据点。label参数设置为'Class %d' % i,表示在图例中显示该类别的标签。设置图像标题和坐标轴标签,使用ax.set_title()、ax.set_xlabel()、ax.set_ylabel()和ax.set_zlabel()方法。添加图例,使用ax.legend()方法。显示图像,使用plt.show()方法。

这段代码可以生成一个三维分类散点图,其中不同类别的数据点用不同的颜色表示,图例中显示了每个类别的标签。可以根据需要对数据和图像进行修改,以符合具体的需求。

运行结果
在这里插入图片描述

3)三维波浪分类散点图

下面代码展示了三个类别的散点图,其中每个点的颜色代表其所属的类别。我们可以看到,类别1的数据分布在x轴和y轴的中心,类别2的数据分布在x轴和y轴的右上角,类别3的数据分布在x轴和y轴的左上角。在z轴方向,所有的数据都呈现出波浪形状:

import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3D# 生成三个类别的随机数据np.random.seed(42)n = 100x1 = np.random.normal(0, 1, n)y1 = np.random.normal(0, 1, n)z1 = np.sin(np.sqrt(x1**2 + y1**2)) / (np.sqrt(x1**2 + y1**2))x2 = np.random.normal(2, 1, n)y2 = np.random.normal(2, 1, n)z2 = np.sin(np.sqrt(x2**2 + y2**2)) / (np.sqrt(x2**2 + y2**2))x3 = np.random.normal(-2, 1, n)y3 = np.random.normal(2, 1, n)z3 = np.sin(np.sqrt(x3**2 + y3**2)) / (np.sqrt(x3**2 + y3**2))# 使用了正态分布和三角函数来生成数据。x1、y1、z1代表类别1的数据,x2、y2、z2代表类别2的数据,x3、y3、z3代表类别3的数据X = np.vstack((np.hstack((x1, x2, x3)),               np.hstack((y1, y2, y3)),               np.hstack((z1, z2, z3)))).T# 将数据合并到一个数组中,并为每个类别设置不同的颜色colors = np.vstack((np.zeros((n, 1)), np.ones((n, 1)), np.ones((n, 1)) * 2))# 使用3D坐标系来绘制散点图fig = plt.figure()ax = fig.add_subplot(111, projection='3d')ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=colors.ravel())ax.set_xlabel('X')ax.set_ylabel('Y')ax.set_zlabel('Z')# 展示图像plt.show()

代码说明

首先,生成三个类别的随机数据。然后,我们使用了正态分布和三角函数来生成数据。x1、y1、z1代表类别1的数据,x2、y2、z2代表类别2的数据,x3、y3、z3代表类别3的数据。接着,我们将数据合并到一个数组中,并为每个类别设置不同的颜色然后,我们使用3D坐标系来绘制散点图显示图像,使用plt.show()方法。

运行结果
在这里插入图片描述

4)旋转效果动图展示

通过鼠标拖动可以旋转观察每个方向维度:

在这里插入图片描述

4. 多主特征:二维散点图矩阵

二维散点图矩阵用于同时展示多个变量之间的关系。它由多个二维散点图组成,每个散点图展示两个变量之间的关系。这些散点图被排列成一个矩阵,其中每个散点图都与其他散点图共享一条轴,从而使得用户可以快速比较不同变量之间的关系。二维散点图矩阵通常用于探索多个变量之间的关系,以及检测异常值和趋势。它可以帮助用户识别变量之间的相关性和非线性关系,以及发现数据中的模式和趋势。此外,二维散点图矩阵还可以用于比较不同子组之间的变量关系,从而帮助用户发现不同子组之间的差异和相似之处。

1)二维散点图矩阵

import numpy as npimport matplotlib.pyplot as pltfrom matplotlib.ticker import NullFormatter# 生成随机数据np.random.seed(0)n_samples = 500x = np.random.randn(n_samples, 4)colors = np.random.randn(n_samples)# 绘制散点图矩阵fig, axes = plt.subplots(4, 4, figsize=(12, 12))fig.subplots_adjust(hspace=0.05, wspace=0.05)# 设置坐标轴格式nullfmt = NullFormatter()for ax in axes.flat:    ax.xaxis.set_major_formatter(nullfmt)    ax.yaxis.set_major_formatter(nullfmt)# 绘图for i in range(4):    for j in range(4):        if i == j:            axes[i, j].hist(x[:, i], bins=20, color='grey')        else:            axes[i, j].scatter(x[:, j], x[:, i], c=colors, alpha=0.5)plt.show()

说明如下:

首先, 生成随机数据:使用numpy.random.randn函数生成500个样本,每个样本有4个特征。然后,创建散点图矩阵:使用matplotlib.pyplot.subplots函数创建4x4的子图矩阵,并设置子图之间的间距。接着,设置坐标轴格式:使用matplotlib.ticker.NullFormatter类设置坐标轴格式,使得每个子图的坐标轴只显示一次。绘制图形:使用嵌套的for循环遍历子图矩阵,如果i=j,则绘制直方图;否则,绘制散点图。其中,c参数指定颜色,alpha参数指定透明度。显示图形:使用matplotlib.pyplot.show函数显示图形。

运行结果:
在这里插入图片描述

2)二维分类散点图矩阵

import numpy as npimport matplotlib.pyplot as plt# 生成随机数据np.random.seed(0)n_samples = 500x = np.random.randn(n_samples, 4)y = np.random.randint(0, 2, n_samples)# 绘制散点图矩阵fig, axes = plt.subplots(4, 4, figsize=(12, 12))fig.subplots_adjust(hspace=0.05, wspace=0.05)# 绘图for i in range(4):    for j in range(4):        if i == j:            axes[i, j].hist(x[y==0, i], bins=20, color='blue', alpha=0.5)            axes[i, j].hist(x[y==1, i], bins=20, color='red', alpha=0.5)        else:            axes[i, j].scatter(x[y==0, j], x[y==0, i], c='blue', alpha=0.5)            axes[i, j].scatter(x[y==1, j], x[y==1, i], c='red', alpha=0.5)# 设置标题和标签titles = ['Feature 1', 'Feature 2', 'Feature 3', 'Feature 4']for i, ax in enumerate(axes.flat):    ax.set_title(titles[i//4], fontsize=12)    ax.set_xlabel('X')    ax.set_ylabel('Y')plt.show()

说明如下

首先,生成随机数据:使用numpy.random.randn函数生成500个样本,每个样本有4个特征。同时,使用numpy.random.randint函数生成500个0或1的标签。然后,创建散点图矩阵:使用matplotlib.pyplot.subplots函数创建4x4的子图矩阵,并设置子图之间的间距。接着,绘制图形:使用嵌套的for循环遍历子图矩阵,如果i=j,则绘制两个类别的直方图;否则,绘制两个类别的散点图。其中,c参数指定颜色,alpha参数指定透明度。设置标题和标签:使用循环遍历子图矩阵,设置每个子图的标题和坐标轴标签。显示图形:使用matplotlib.pyplot.show函数显示图形。

运行结果
在这里插入图片描述

书籍推荐(包邮送书5本)

《21个项目玩转PyTorch实战》
在这里插入图片描述

PyTorch 是基于 Torch 库的开源机器学习库,它主要由 Meta(原 Facebook)的人工智能研究实验室开发,在自然语言处理和计算机视觉领域都具有广泛的应用。本书介绍了简单且经典的入门项目,方便快速上手,如 MNIST数字识别,读者在完成项目的过程中可以了解数据集、模型和训练等基础概念。本书还介绍了一些实用且经典的模型,如 R-CNN 模型,通过这个模型的学习,读者可以对目标检测任务有一个基本的认识,对于基本的网络结构原理有一定的了解。另外,本书对于当前比较热门的生成对抗网络和强化学习也有一定的介绍,方便读者拓宽视野,掌握前沿方向。

抽奖送书老规矩(不点赞收藏中奖无效):注意记得关注博主不然中奖了还不知道!!!

1. 点赞收藏文章2. 评论区留言:人生苦短,我用Python!!!(留言才能进入奖池,每人最多留言三条)3. 周日八点爬虫抽奖5人如果不想抽奖京东自营购买链接:https://item.jd.com/13522327.html

书籍推荐

在这里插入图片描述
运镜也叫运动镜头,在短视频拍摄中,摄影师或摄像师需要充分利用自己所掌握的镜头运动技能,用手机拍摄出满足各种视觉表现的镜头效果。除了通常的推、拉、摇、移、跟、升、降、旋转和环绕等基础技法外,还有哪些高级的运镜技法呢?如何才能成长为一名优秀的运镜师呢?本书将为你介绍运镜师需要掌握的众多技能,并配有 100 多集超值的视频课程讲解。

北京大学出版社,4月“423世界读书日”促销活动安排来啦
当当活动日期:4.6-4.11,4.18-4.23
京东活动日期: 4.6 一天, 4.17-4.23
活动期间满100减50或者半价5折销售
当当:北京大学出版社自营店 京东:北京大学出版社自营店
希望大家关注参与423读书日北大社促销活动


点击全文阅读


本文链接:http://zhangshiyu.com/post/58700.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1