散点图scatter简介

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了散点图scatter简介相关的知识,希望对你有一定的参考价值。

参考技术A 2022-06-03

eg1: 注:这里原例子中c=linspace(1,10,length(x)); 感觉这个应该在(0,1)范围内。难道是我理解错误?
https://ww2.mathworks.cn/help/matlab/ref/scatter.html#btrli6o-1_1

eg2:

以下的介绍来自:
https://chartio.com/learn/charts/what-is-a-scatter-plot/
## 什么是散点图?

散点图(又名散点图,散点图)使用点来表示两个不同数值变量的值。水平和垂直轴上每个点的位置表示单个数据点的值。散点图用于观察变量之间的关系。

上面的示例散点图显示了虚构树木样本的直径和高度。每个点代表一棵树;每个点的水平位置表示树的直径(以厘米为单位),垂直位置表示树的高度(以米为单位)。从图中,我们可以看到一棵树的直径与其高度之间通常存在紧密的正相关关系。我们还可以观察到一个异常点,即一棵直径比其他树大得多的树。这棵树的周长似乎相当短,这可能需要进一步调查。

## 何时应该使用散点图

散点图的主要用途是观察和显示两个数值变量之间的关系。散点图中的点不仅报告了单个数据点的值,而且还报告了将数据作为一个整体时的模式。

相关关系的识别在散点图中很常见。在这些情况下,我们想知道,如果给定一个特定的水平值,那么对于垂直值的预测是怎样的。您经常会看到水平轴上的变量表示自变量,而垂直轴上的变量表示因变量。变量之间的关系可以用多种方式描述:正或负、强或弱、线性或非线性。

散点图也可用于识别数据中的其他模式。我们可以根据点集聚集在一起的紧密程度将数据点分组。散点图还可以显示数据中是否存在任何意外差距以及是否存在异常点。如果我们想将数据分割成不同的部分,这可能很有用,比如在用户角色的开发中。

### 数据结构示例

为了创建散点图,我们需要从数据表中选择两列,一个用于绘图的每个维度。表格的每一行将成为图中的一个点,其位置根据列值。

## 使用散点图时的常见问题 #### 过度绘图

当我们有很多数据点要绘制时,这可能会遇到过度绘制的问题。过度绘图是数据点重叠到我们难以看到点和变量之间关系的程度的情况。当其中许多数据点位于一个小区域时,很难判断数据点的密集程度。

有一些常见的方法可以缓解这个问题。一种替代方法是仅对数据点的一个子集进行采样:随机选择的点仍应给出完整数据中模式的一般概念。我们还可以更改点的形式,增加透明度以使重叠可见,或减小点的大小以减少重叠的发生。作为第三种选择,我们甚至可以选择不同的图表类型,例如 heatmap ,其中颜色表示每个 bin 中的点数。此用例中的热图也称为二维直方图。

#### 将相关性解释为因果关系

这不是创建散点图的问题,而是其解释的问题。仅仅因为我们在散点图中观察到两个变量之间的关系,并不意味着一个变量的变化会导致另一个变量的变化。这引起了统计中的一个常见短语,即 相关性并不意味着因果关系 。观察到的关系可能是由影响两个绘制变量的第三个变量驱动的,因果关系可能颠倒了,或者模式只是巧合。

例如,查看城市统计数据以了解他们拥有的绿地数量和犯罪数量并得出结论是其中一个导致另一个是错误的,这可以忽略这样一个事实,即人口更多的大城市往往拥有更多两者,并且它们只是通过那个和其他因素相关联。如果需要建立因果关系,则需要进行进一步分析以控制或解释其他潜在变量的影响,以排除其他可能的解释。

## 常用散点图选项 #### 添加趋势线

当散点图用于查看变量之间的预测或相关关系时,通常会在图中添加一条趋势线,以显示数学上与数据的最佳拟合。这可以提供一个额外的信号,说明两个变量之间的关系有多强,以及是否有任何不寻常的点影响趋势线的计算。

#### 分类第三变量

基本散点图的一个常见修改是添加第三个变量。第三个变量的值可以通过修改点的绘制方式进行编码。对于指示分类值(如地理区域或性别)的第三个变量,最常见的编码是通过点颜色。给每个点一个不同的色调可以很容易地显示每个点对相应组的成员身份。

<figcaption style="box-sizing: border-box; display: block; margin: 1rem 0px; font-size: 0.8em; color: rgb(153, 153, 153);">树类型的着色点显示 Fersons(黄色)通常比 Miltons(蓝色)更宽,但对于相同的直径也更短。</figcaption>

有时在第三变量编码中看到的另一种选择是形状。形状的一个潜在问题是,不同的形状可能具有不同的大小和表面积,这可能会影响群体的感知方式。但是,在某些无法使用颜色的情况下(例如在印刷中),形状可能是区分组的最佳选择。

[图片上传失败...(image-412f2c-1654268987201)]

<figcaption style="box-sizing: border-box; display: block; margin: 1rem 0px; font-size: 0.8em; color: rgb(153, 153, 153);">上面的形状已按比例缩放以使用相同数量的墨水。</figcaption>

#### 数字第三个变量

对于具有数值的第三个变量,常见的编码来自于改变点的大小。基于第三个变量的点大小的散点图实际上有一个不同的名称,即 气泡图 。较大的点表示较高的值。可以在其自己的文章中阅读有关如何构建气泡图的更详细讨论。

作为另一种选择,色调也可用于描述数值。我们希望使用连续的颜色序列,而不是像分类情况那样对点使用不同的颜色,例如,较深的颜色表示较高的值。请注意,对于尺寸和颜色,图例对于解释第三个变量很重要,因为我们的眼睛不太能够像位置一样容易地辨别尺寸和颜色。

#### 使用注释和颜色突出显示

如果您想使用散点图来展示见解,最好通过使用注释和颜色来突出显示特定的兴趣点。去饱和不重要的点使剩余点突出,并为比较剩余点提供参考。

### 相关地块 #### 散点图

当散点图中的两个变量是地理坐标 - 纬度和经度 - 我们可以将这些点叠加在地图上以获得散点图(也称为点图)。当地理环境有助于绘制特定的见解并且可以与其他第三变量编码(如点大小和颜色)结合使用时,这会很方便。

[图片上传失败...(image-ac514e-1654268987201)]

<figcaption style="box-sizing: border-box; display: block; margin: 1rem 0px; font-size: 0.8em; color: rgb(153, 153, 153);">散点图的一个著名例子是约翰·斯诺 1854 年的霍乱爆发地图,显示霍乱病例(黑条)集中在 Broad Street 上的一个特定水泵(中心点)周围。原文: 维基共享资源 </figcaption>

如上所述,当需要绘制大量数据点并且它们的密度会导致过度绘制问题时,热图可以成为散点图的一个很好的替代方案 。 但是,当一个或两个变量不连续且不是数字时,热图也可以以类似的方式用于显示变量之间的关系。如果我们尝试用散点图描绘离散值,则单个级别的所有点都将在一条直线上。热图可以通过将值合并为计数框来克服这种过度绘图。

#### 连通散点图

如果我们要添加到散点图中的第三个变量指示时间戳,那么我们可以选择的一种图表类型是连接散点图。我们没有修改点的形式来指示日期,而是使用线段按顺序连接观察结果。这可以更容易地了解这两个主要变量如何不仅相互关联,而且这种关系如何随时间变化。如果横轴也对应时间,那么所有的线段都会从左到右一致地连接点,我们就有了一个基本的 折线图 。

## 可视化工具

散点图是一种基本图表类型,应该可以通过任何可视化工具或解决方案创建。计算基本线性趋势线也是一种相当常见的选择,根据第三个分类变量的水平着色点也是如此。然而,其他选项,如非线性趋势线和按形状编码第三变量值,并不常见。然而,即使没有这些选项,当您需要调查数据中数值变量之间的关系时,散点图也是一种有价值的图表类型。

Python使用scatter()绘制散点图

绘制简单散点图

要绘制单个点,使用scatter()函数,并向它传递一对x和y坐标,它将在指定位置绘制一个点

import matplotlib.pyplot as plt

plt.scatter(2,4)
plt.show()

运行结果:

image

图形美化

下面设置输出样式,使其更有趣:添加标题,给轴加上标签

import matplotlib.pyplot as plt

plt.scatter(2,4,s=200)
#设置标题并加上轴标签
plt.title("Squares Numbers",fontsize=24)
plt.xlabel("Value",fontsize=14)
plt.xlabel("Square of Value",fontsize=14)

#设置刻度标记的大小
plt.tick_params(axis=\'both\',which=\'major\',labelsize=14)
plt.show()

运行结果:

image

绘制一系列散点

要绘制一系列散点,可向scatter()传递2个分别包含x值和y值的列表

image

绘制的坐标分别是(1,1),(2,4),(3,9),(4,16),(5,25)

自动生成数据绘制散点图

import matplotlib.pyplot as plt

x = list(range(1,1001))
y = [x**2 for x in x]
plt.scatter(x,y,s=200)
#设置标题并加上轴标签
plt.title("Squares Numbers",fontsize=24)
plt.xlabel("Value",fontsize=14)
plt.xlabel("Square of Value",fontsize=14)

#设置刻度标记的大小
plt.tick_params(axis=\'both\',which=\'major\',labelsize=14)

#设置每个坐标的取值范围
plt.axis([0,1100,0,1100000])
plt.show()

运行结果:

image

删除数据点的轮廓

从上图可以看出,绘制很多点的时候,轮廓会连在一起,要删除数据点的轮廓可调用scatter()时,传递实参edgecolor=\'none\'

image

自定义颜色

要修改颜色,只需要向scatter()传递参数c,并将其设置为要使用的颜色的名称

image

运行结果:

image

使用颜色映射

模块pyplot内置了一组颜色映射,要使用这些颜色映射,你需要告诉pyplot该如何设置数据集中每个点的颜色

image

运行结果:

image

自动保存散点图

上边的图形制作完成之后,是否需要自动保存散点图呢?如果需要的话,操作如下:

注意:在保存图形的时候,必须注释plt.show()代码,不然保存完成之后,图形是空白

image

点击运行后,可以看到图片已经保存在程序所在目录下

image

第一个实参:指定保存的图片名称

第二个实参:将指定的空白区域裁减掉

以上是关于散点图scatter简介的主要内容,如果未能解决你的问题,请参考以下文章

散点图 scatter

散点图 scatter

散点图 scatter

Python使用scatter()绘制散点图

Python的散点图绘制 scatter

使用matplotlib中scatter()绘制散点图