Matplotlib 散点图

我们可以使用 pyplot 中的 scatter() 方法来绘制散点图。

scatter() 方法语法格式如下:

matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, *, edgecolors=None, plotnonfinite=False, data=None, **kwargs)

参数说明:

x,y:长度相同的数组,也就是我们即将绘制散点图的数据点,输入数据。

s:点的大小,默认 20,也可以是个数组,数组每个参数为对应点的大小。

c:点的颜色,默认蓝色 'b',也可以是个 RGB 或 RGBA 二维行数组。

marker:点的样式,默认小圆圈 'o'。

cmap:Colormap,默认 None,标量或者是一个 colormap 的名字,只有 c 是一个浮点数数组的时才使用。如果没有申明就是 image.cmap。

norm:Normalize,默认 None,数据亮度在 0-1 之间,只有 c 是一个浮点数的数组的时才使用。

vmin,vmax::亮度设置,在 norm 参数存在时会忽略。

alpha::透明度设置,0-1 之间,默认 None,即不透明。

linewidths::标记点的长度。

edgecolors::颜色或颜色序列,默认为 'face',可选值有 'face', 'none', None。

plotnonfinite::布尔值,设置是否使用非限定的 c ( inf, -inf 或 nan) 绘制点。

**kwargs::其他参数。

以下实例 scatter() 函数接收长度相同的数组参数,一个用于 x 轴的值,另一个用于 y 轴上的值:

实例

import matplotlib.pyplot as plt

import numpy as np

x = np.array([1, 2, 3, 4, 5, 6, 7, 8])

y = np.array([1, 4, 9, 16, 7, 11, 23, 18])

plt.scatter(x, y)

plt.show()

显示结果如下:

设置图标大小:

实例

import matplotlib.pyplot as plt

import numpy as np

x = np.array([1, 2, 3, 4, 5, 6, 7, 8])

y = np.array([1, 4, 9, 16, 7, 11, 23, 18])

sizes = np.array([20,50,100,200,500,1000,60,90])

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

plt.show()

 

显示结果如下:

自定义点的颜色:

实例

import matplotlib.pyplot as plt

import numpy as np

x = np.array([1, 2, 3, 4, 5, 6, 7, 8])

y = np.array([1, 4, 9, 16, 7, 11, 23, 18])

colors = np.array(["red","green","black","orange","purple","beige","cyan","magenta"])

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

plt.show()

 

显示结果如下:

设置两组散点图:

实例

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

 

显示结果如下:

使用随机数来设置散点图:

实例

import numpy as np

import matplotlib.pyplot as plt

# 随机数生成器的种子

np.random.seed(19680801)

N = 50

x = np.random.rand(N)

y = np.random.rand(N)

colors = np.random.rand(N)

area = (30 * np.random.rand(N))**2 # 0 to 15 point radii

plt.scatter(x, y, s=area, c=colors, alpha=0.5) # 设置颜色及透明度

plt.title("Scatter Test") # 设置标题

plt.show()

 

显示结果如下:

 

 

颜色条 Colormap

Matplotlib 模块提供了很多可用的颜色条。

颜色条就像一个颜色列表,其中每种颜色都有一个范围从 0 到 100 的值。

下面是一个颜色条的例子:

设置颜色条需要使用 cmap 参数,默认值为 'viridis',之后颜色值设置为 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()

 

显示结果如下:

换个颜色条参数, cmap 设置为 afmhot_r:

实例

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='afmhot_r')

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

 

 

REF

https://www.runoob.com/matplotlib/matplotlib-scatter.html

查看原文