简易散点图¶
另一种常用的图形时散点图。每个点是一个独立的点、圆圈或者其他形状。首先设置一下Matplotlib的基础设置。
%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use("seaborn-v0_8-whitegrid")
import numpy as np
#汉字显示设置
plt.rcParams['font.sans-serif'] =['SimHei'] #设置字体为SimHei
plt.rcParams['axes.unicode_minus'] = False #负号显式正常
用 plt.plot绘制散点图¶
x = np.linspace(0, 10, 30)
y = np.sin(x)
plt.plot(x, y, 'o', color='black');
在本例子中,第三个参数'o'表示单点图型,和线性图形中的'-', '--'一样控制图形形态。这些图形的其他样式请参考plt.plot说明文档,或者Matplotlib在线文档,这些符号大多数符合直观认识。下面是几个相关的例子:
rng = np.random.RandomState(0)
for marker in ['o', '.', ',', 'x', '+', 'v', '^', '<', '>', 's', 'd']:
plt.plot(rng.rand(5), rng.rand(5), marker,
label="marker='{0}'".format(marker))
plt.legend(numpoints=1)
plt.xlim(0, 1.8);
散点图也可以与线性图形一起显示,第三个参数也是两者的组合。
plt.plot(x, y, '-ok');
其他plt.plot关键参数分别控制了图形的其他特征,如大小,线宽、点的边缘颜色、点的中心颜色、点的边缘宽度等等。
plt.plot(x, y, '-p', color='gray',
markersize=15, linewidth=4,
markerfacecolor='white',
markeredgecolor='red',
markeredgewidth=2)
plt.ylim(-1.2, 1.2);
plt.plot函数的这种设置方式可以进行各种可能的可视化设置。其他各种应用可以参考plt.plot文档。
使用plt.scatter绘制散点图¶
第二种,也是更强大的散点图绘制方法就是使用plt.scatter函数,它的用法与plt.plot类似。
plt.scatter(x, y, marker='o');
plt.scatter 与plt.plot 绘制散点图最大的区别在于前者可以在绘图过程中对每个点进行单独控制,每一个点的特性对可以得到体现。
下面这个例子表示了我们创建一个不同大小不同颜色的散点。为了显示不同的点,我们设置了图形的透明度alpha参数,来调整每个点的透明水平。
rng = np.random.RandomState(0)
x = rng.randn(100)
y = rng.randn(100)
colors = rng.rand(100)
sizes = 1000 * rng.rand(100)
plt.scatter(x, y, c=colors, s=sizes, alpha=0.3,
cmap='viridis')
plt.colorbar(); # show color scale
自动生成的颜色在右侧颜色条中显示 (使用colorbar() 命令), 每个点的大小使用像素值来设置。在著名的鸢尾花例子中,可以使用Sk-learn中数据来可视化。在鸢尾花(Iris)数据中有三种花,每一行是一个样本,其花萼(sepal)和花瓣(petal)的长度和宽度都经过精心测量。数据的基本可视化如下所示:
from sklearn.datasets import load_iris
iris = load_iris()
features = iris.data.T
plt.scatter(features[0], features[1], alpha=0.2,
s=100*features[3], c=iris.target, cmap='viridis')
plt.title('鸢尾花的可视化图形')
plt.xlabel(iris.feature_names[0])
plt.ylabel(iris.feature_names[1]);
散点图可以看到不同维度的数据:每个点的坐标显示花萼长度和宽度,点的大小则表示花瓣的宽度,三种颜色代表三种不类别的鸢尾花。这一类多颜色多特征的散点图在探索数据和数据演示过程中非常有用。
plot 与 scatter: 关于效率的说明¶
我们知道,使用 plt.plot 和 plt.scatter都可以绘制散点图, 是什么在影响我们对这两种方法的选择呢?由于 plt.scatter是对每一个点进行控制,所以消耗的内存资源较多。在数据量较小的情况下,两者区别不大,但在较大规模的数据点应用时,这种差距就显现出来了。所以,在大数据中使用plot绘制散点图会远远快于使用scatter。