Matplotlib 散点图

创建散点图

使用 Pyplot,您可以使用 scatter() 函数来绘制散点图。

scatter() 函数为每个观测值绘制一个点。它需要两个长度相同的数组,一个用于 x 轴的值,另一个用于 y 轴的值:

实例

一个简单的散点图:

import matplotlib.pyplot as plt
import numpy as np

x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])

plt.scatter(x, y)
plt.show()

亲自试一试

结果:

Matplotlib 散点图

上例中的观测值是 13 辆汽车经过的结果。

X 轴显示了汽车的车龄。

Y 轴显示了汽车经过时的速度。

这些观测值之间是否存在关系?

看起来车越新,开得越快,但这可能只是巧合,毕竟我们只记录了 13 辆汽车。

比较图表

在上面的例子中,速度和年龄之间似乎存在某种关系,但如果我们再将另一天的观测值也绘制出来会如何呢?散点图会告诉我们其他信息吗?

实例

在同一张图上绘制两个图表:

import matplotlib.pyplot as plt
import numpy as np

# 第一天,13 辆汽车的车龄和速度:
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x, y)

# 第二天,15 辆汽车的车龄和速度:
x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12])
y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85])
plt.scatter(x, y)

plt.show()

亲自试一试

结果:

Matplotlib 散点图

注意:两个图表使用两种不同的颜色绘制,默认是蓝色和橙色,稍后在本章中您将学习如何更改颜色。

通过比较这两个图表,我认为可以安全地说它们都给出了相同的结论:汽车越新,开得越快。

颜色

您可以使用 colorc 参数为每个散点图设置自己的颜色:

实例

设置标记点的颜色:

import matplotlib.pyplot as plt
import numpy as np

x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x, y, color = 'hotpink')

x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12])
y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85])
plt.scatter(x, y, color = '#88c999')

plt.show()

亲自试一试

结果:

Matplotlib 散点图

为每个点着色

您甚至可以使用颜色数组作为 c 参数的值来为每个点设置特定颜色:

注意:您不能为此使用 color 参数,只能使用 c 参数。

实例

设置标记点的颜色:

import matplotlib.pyplot as plt
import numpy as np

x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array(["red","green","blue","yellow","pink","black","orange","purple","beige","brown","gray","cyan","magenta"])

plt.scatter(x, y, c=colors)

plt.show()

亲自试一试

结果:

Matplotlib 散点图

彩色映射

Matplotlib 模块提供了许多可用的彩色映射。

彩色映射就像颜色列表,其中每种颜色都有一个从 0 到 100 的值。

以下是一个彩色映射的例子:

ColorMap

这个彩色映射称为 'viridis',如您所见,它从 0(紫色)开始,一直到 100(黄色)。

如何使用彩色映射

您可以使用关键字参数 cmap 和彩色映射的值来指定彩色映射,在这种情况下,'viridis' 是 Matplotlib 中可用的内置彩色映射之一。

此外,您必须创建一个数组,其中包含值(从 0 到 100),每个散点图中的点一个值:

实例

创建颜色数组,并在散点图中指定彩色映射:

import matplotlib.pyplot as plt
import numpy as np

x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array([0, 10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])

plt.scatter(x, y, c=colors, cmap='viridis')

plt.show()

亲自试一试

结果:

Matplotlib 散点图

您可以通过包含 plt.colorbar() 语句来在绘图中包含彩色映射:

实例

包含实际的彩色映射:

import matplotlib.pyplot as plt
import numpy as np

x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array([0, 10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])

plt.scatter(x, y, c=colors, cmap='viridis')

plt.colorbar()

plt.show()

亲自试一试

结果:

Matplotlib 散点图

可用的彩色映射

您可以选择任意内置彩色映射:

名称 试一试 反转 试一试
Accent 试一试 Accent_r 试一试
Blues 试一试 Blues_r 试一试
BrBG 试一试 BrBG_r 试一试
BuGn 试一试 BuGn_r 试一试
BuPu 试一试 BuPu_r 试一试
CMRmap 试一试 CMRmap_r 试一试
Dark2 试一试 Dark2_r 试一试
GnBu 试一试 GnBu_r 试一试
Greens 试一试 Greens_r 试一试
Greys 试一试 Greys_r 试一试
OrRd 试一试 OrRd_r 试一试
Oranges 试一试 Oranges_r 试一试
PRGn 试一试 PRGn_r 试一试
Paired 试一试 Paired_r 试一试
Pastel1 试一试 Pastel1_r 试一试
Pastel2 试一试 Pastel2_r 试一试
PiYG 试一试 PiYG_r 试一试
PuBu 试一试 PuBu_r 试一试
PuBuGn 试一试 PuBuGn_r 试一试
PuOr 试一试 PuOr_r 试一试
PuRd 试一试 PuRd_r 试一试
Purples 试一试 Purples_r 试一试
RdBu 试一试 RdBu_r 试一试
RdGy 试一试 RdGy_r 试一试
RdPu 试一试 RdPu_r 试一试
RdYlBu 试一试 RdYlBu_r 试一试
RdYlGn 试一试 RdYlGn_r 试一试
Reds 试一试 Reds_r 试一试
Set1 试一试 Set1_r 试一试
Set2 试一试 Set2_r 试一试
Set3 试一试 Set3_r 试一试
Spectral 试一试 Spectral_r 试一试
Wistia 试一试 Wistia_r 试一试
YlGn 试一试 YlGn_r 试一试
YlGnBu 试一试 YlGnBu_r 试一试
YlOrBr 试一试 YlOrBr_r 试一试
YlOrRd 试一试 YlOrRd_r 试一试
afmhot 试一试 afmhot_r 试一试
autumn 试一试 autumn_r 试一试
binary 试一试 binary_r 试一试
bone 试一试 bone_r 试一试
brg 试一试 brg_r 试一试
bwr 试一试 bwr_r 试一试
cividis 试一试 cividis_r 试一试
cool 试一试 cool_r 试一试
coolwarm 试一试 coolwarm_r 试一试
copper 试一试 copper_r 试一试
cubehelix 试一试 cubehelix_r 试一试
flag 试一试 flag_r 试一试
gist_earth 试一试 gist_earth_r 试一试
gist_gray 试一试 gist_gray_r 试一试
gist_heat 试一试 gist_heat_r 试一试
gist_ncar 试一试 gist_ncar_r 试一试
gist_rainbow 试一试 gist_rainbow_r 试一试
gist_stern 试一试 gist_stern_r 试一试
gist_yarg 试一试 gist_yarg_r 试一试
gnuplot 试一试 gnuplot_r 试一试
gnuplot2 试一试 gnuplot2_r 试一试
gray 试一试 gray_r 试一试
hot 试一试 hot_r 试一试
hsv 试一试 hsv_r 试一试
inferno 试一试 inferno_r 试一试
jet 试一试 jet_r 试一试
magma 试一试 magma_r 试一试
nipy_spectral 试一试 nipy_spectral_r 试一试
ocean 试一试 ocean_r 试一试
pink 试一试 pink_r 试一试
plasma 试一试 plasma_r 试一试
prism 试一试 prism_r 试一试
rainbow 试一试 rainbow_r 试一试
seismic 试一试 seismic_r 试一试
spring 试一试 spring_r 试一试
summer 试一试 summer_r 试一试
tab10 试一试 tab10_r 试一试
tab20 试一试 tab20_r 试一试
tab20b 试一试 tab20b_r 试一试
tab20c 试一试 tab20c_r 试一试
terrain 试一试 terrain_r 试一试
twilight 试一试 twilight_r 试一试
twilight_shifted 试一试 twilight_shifted_r 试一试
viridis 试一试 viridis_r 试一试
winter 试一试 winter_r 试一试

大小

您可以使用 s 参数来改变点的大小。

就像颜色一样,请确保 sizes 数组的长度与 x 轴和 y 轴的数组长度相同:

实例

为标记设置您自己的大小:

import matplotlib.pyplot as plt
import numpy as np

x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
sizes = np.array([20,50,100,200,500,1000,60,90,10,300,600,800,75])

plt.scatter(x, y, s=sizes)

plt.show()

亲自试一试

结果:

Matplotlib 散点图

透明度

您可以使用 alpha 参数来调整点的透明度。

就像颜色一样,请确保 sizes 数组的长度与 x 轴和 y 轴的数组长度相同:

实例

为标记设置您自己的大小:

import matplotlib.pyplot as plt
import numpy as np

x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
sizes = np.array([20,50,100,200,500,1000,60,90,10,300,600,800,75])

plt.scatter(x, y, s=sizes, alpha=0.5)

plt.show()

亲自试一试

结果:

Matplotlib 散点图

结合颜色、大小和透明度

您可以将色彩映射与不同大小的点结合起来。如果点是透明的,这将得到最好的可视化效果:

实例

为 x 点、y 点、颜色和大小创建包含 100 个值的随机数组:

import matplotlib.pyplot as plt
import numpy as np

x = np.random.randint(100, size=(100))
y = np.random.randint(100, size=(100))
colors = np.random.randint(100, size=(100))
sizes = 10 * np.random.randint(100, size=(100))

plt.scatter(x, y, c=colors, s=sizes, alpha=0.5, cmap='nipy_spectral')

plt.colorbar()

plt.show()

亲自试一试

结果:

Matplotlib 散点图