Matplotlib Scatter
创建散点图
使用 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
#第一天,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()
结果
自己试试 »注意: 这两个图用两种不同的颜色绘制,默认情况下为蓝色和橙色,你将在本章的后面学习如何更改颜色。
通过比较这两个图,我认为可以安全地说,它们都得出了相同的结论:汽车越新,行驶速度越快。
颜色
你可以使用 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()
结果
自己试试 »
可用的颜色映射
你可以选择任何内置颜色映射
名称 | 反转 | |||
---|---|---|---|---|
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()
结果
自己试试 »
组合颜色、尺寸和透明度
你可以将颜色映射与不同尺寸的点组合使用。如果点是透明的,效果最好。
例子
创建包含 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()
结果
自己试试 »