Matplotlib-绘制散点图

15.Matplotlib-绘制散点图

扫码关注【牵引小哥讲Python】,关注回复【资源】领取学习资源!

原创作者:牵引小哥

微信公众号:牵引小哥讲Python

注:转载或复制请注明出处——牵引小哥

本期小哥主要讲解散点图的绘制方法。在Matplotlib中使用ax.scatter()函数绘制散点图。官方参考链接:

https://matplotlib.org/api/_as_gen/matplotlib.pyplot.scatter.html#matplotlib.pyplot.scatter

1. ax.scatter()的基础用法

ax.scatter(x, y, s=None, c=None, marker=None, cmap=None, alpha=None, edgecolors=None, **kwargs)                  

关键参数说明:

  • x:x轴数据序列
  • y:y轴数据序列
  • c:数据点的颜色,可以是单一颜色,也可是颜色序列
  • marker:数据点形状(默认圆形)
  • camp:可对数据点指定色谱映射
  • alpha:数据点透明度
  • edgecolors:数据点轮廓颜色
  • **kwargs:其他参数

应用举例:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

mpl.rcParams['font.size'] = 16
mpl.rcParams['figure.figsize'] = (6,5) 
plt.rcParams['font.sans-serif'] = ['SimHei']  
plt.rcParams['axes.unicode_minus'] = False  

#%% 基础用法
x = np.arange(0, 6, 0.2)
y1 = x**2
y2 = (x - 5.8)**2
# 根据数据特点定义数据点颜色和大小的映射序列
colors = np.linspace(y1.min(), y1.max(), len(x)) #颜色序列与y轴数值对应
size =15 * np.linspace(1, 10, len(x))

fig, ax = plt.subplots()
ax.scatter(x, y1, s=size, c=colors, alpha=0.75, cmap='hsv')
# cmap='hsv'意为使用Matplotlib内置的‘hsv’色谱,更多讲解可参考小哥之前关于颜色的文章
plt.show()
plt.tight_layout()

可以看到,数据点的颜色和大小均随数值变化。

小哥Tips:数据点的size随数据顺序,由小变大。

接下来,小哥简单讲解下关于颜色和大小的映射顺序问题。比如我们绘制y1,y2两个关于x = 5.8对称的函数散点图:

# y1 = x**2
# y2 = (x - 5.8)**2
ax.scatter(x, y1, s=size, c=colors, alpha=0.75, cmap='hsv')
ax.scatter(x, y2, s=size, c=colors, alpha=0.75, cmap='viridis')

从结果可以看出,数据点的大小并不对称。为了使其对称,就需要更改数据序列的顺序,使其逆序。在这里,小哥使用数组切片技巧[: : -1]获得元组的逆序结果。

ax.scatter(x, y1, s=size, c=colors, alpha=0.75, cmap='hsv')
ax.scatter(x[::-1], y2[::-1], s=size, c=colors, alpha=0.75, cmap='hsv')

还可以为散点图添加图例:

scatter = ax.scatter(x, y1, s=size, c=colors, alpha=0.75, cmap='hsv')
ax.legend(*scatter.legend_elements(), bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0)

不同的颜色对应不同的与y轴的数值大小对应。

2. 离散数据的散点图

对于离散的数据可以使用散点图进行可视化。

np.random.seed(0)
fig, ax = plt.subplots()
citys = ['成都', '武汉', '重庆']
colors = ['blue', 'red', 'yellow']
for i in range(len(citys)):
    color = colors[i]
    city = citys[i]
    n = 20
    x, y = np.random.rand(2, n) # 生成随机数数组
    scale = 200.0 * np.random.rand(n)
    ax.scatter(x, y, c=color, s=scale, label=city,
                alpha=0.5, edgecolors='none')

ax.legend(loc='lower center', ncol=3, bbox_to_anchor=(0.5, 1))
ax.grid(color='k', linestyle='--', linewidth=0.2)

plt.show()
plt.tight_layout()

你可能感兴趣的:(Matplotlib-绘制散点图)