Python Matplotlib Scatter 散点图

Matplotlib,风格类似 Matlab 的基于 Python 的图表绘图系统。 Matplotlib 是 Python 最著名的绘图库,它提供了一整套和 Matlab 相似的命令 API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入 GUI 应用程序中。本文主要介绍Python Matplotlib Scatter 散点图。

1、创建散点图

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

Result:


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

X轴显示汽车的年龄。

Y轴表示汽车通过时的速度。

观测值之间有任何关系吗?

汽车似乎越新,行驶速度就越快,但这可能是一个巧合,毕竟我们只注册了13辆汽车。

2、对比图

在上面的示例中,速度和年龄之间似乎存在某种关系,但是如果我们还绘制另一天的观测值怎么办? 散点图还会告诉我们其他内容吗?

例如:

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

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

 Result:


注意:这两个图以两种不同的颜色绘制,默认情况下为蓝色和橙色,您将在本章后面学习如何更改颜色。

通过比较这两个图,我可以肯定地说,它们都给出了相同的结论:汽车越新,行驶速度越快。

3、颜色

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

Result:


4、每个点的颜色

甚至可以通过使用颜色数组作为每个点的值来设置特定颜色 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()

 Result:


5、ColorMap

Matplotlib模块具有许多可用的颜色图。

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

这是一个颜色图的示例:


该颜色图称为“viridis”,如您所见,其范围从0(紫色)到100(黄色)。

如何使用ColorMap

您可以使用关键字参数指定颜色图 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()

Result:


可以通过包含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()

 Result:


可用的颜色图

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

名字

反向

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

6、大小尺寸

您可以使用 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()

Result:


7、Alpha

可以使用 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()

Result:


8、组合颜色大小和透明度

可以在点上组合具有不同大小的颜色图。 如果点是透明的,则可以最好地可视化:

例如: 

创建带有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()

Result:


推荐阅读
cjavapy编程之路首页