目录

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

结果:

亲自试一试 »

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

X 轴显示汽车的年龄。

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

观察结果之间是否存在任何关系?

似乎车越新,开得越快,但这可能是巧合,毕竟我们只登记了13辆车。


比较图

在上面的例子中,速度和年龄之间似乎存在关系,但是如果我们也绘制另一天的观察结果呢?散点图还能告诉我们其他信息吗?

示例

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

import matplotlib.pyplot as plt
import numpy as np

#day one, the age and speed of 13 cars:
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)

#day two, the age and speed of 15 cars:
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()

结果:

亲自试一试 »

笔记:这两个图用两种不同的颜色绘制,默认为蓝色和橙色,您将在本章后面学习如何更改颜色。

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



颜色

您可以使用以下命令为每个散点图设置自己的颜色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])
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()

结果:

亲自试一试 »

为每个点着色

您甚至可以通过使用颜色数组作为值来为每个点设置特定颜色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 模块有许多可用的颜色图。

颜色图就像颜色列表,其中每种颜色的值范围为 0 到 100。

这是颜色图的示例:

该颜色图称为“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()

结果:

亲自试一试 »

您可以通过将颜色图包含在绘图中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()

结果:

亲自试一试 »

可用的颜色图

您可以选择任何内置颜色图:

Name   Reverse
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参数。

就像颜色一样,确保尺寸数组与 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()

结果:

亲自试一试 »

Α

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

就像颜色一样,确保尺寸数组与 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()

结果:

亲自试一试 »

结合颜色大小和 Alpha

您可以将颜色图与不同大小的点组合起来。如果点是透明的,则效果最好:

示例

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

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

结果:

亲自试一试 »