[ Matplotlib version: 3.2.1 ]
散点图(scatter plot),不由线段连接,而是由独立的点、圆圈或其他形状构成。
%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np
简易散点图
x = np.linspace(0, 10, 30)
y = np.sin(x)
plt.plot(x, y, 'o', color='black')
# 第三个参数为图形符号缩写形式
不同的图形标记
plt.figure(figsize=(12,8))
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(x, y, '-p', color='gray', markersize=15, linewidth=4,
markerfacecolor='white', markeredgecolor='gray', markeredgewidth=2)
简易散点图
plt.scatter(x, y, marker='o')
改变散点图中散点的大小、颜色和透明度
plt.scatter
与plt.plot
的主要差别在于,前者在创建散点图时具有更高灵活性,可以单独控制每个散点与数据匹配,也可以让每个散点具有不同的属性(大小、表面颜色、边框颜色等)alpha
参数调整透明度,以便更好显示重叠部分colorbar()
显示),散点的大小以像素为单位。这样散点的颜色与大小就可以显示多维数据的信息了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()
# 用散点属性对鸢尾花的特征编码
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.xlabel(iris.feature_names[0])
plt.ylabel(iris.feature_names[1])
散点图可以让我们同事看到不同维度的数据:每个点的坐标值(x, y)分别表示花萼的长度和宽度,而点的大小表示花瓣的宽度,三种颜色对应三种不同类型的鸢尾花。
更多详见:matplotlib.pyplot.scatter - Matplotlib 3.2.1 documentation
在数据量较小的时候,两者在效率上差异不大。
当大型数据集(数据变大到几千个散点)时,plt.plot
的效率将大大高于plt.scatter
。
plt.scatter
会对每个散点进行单独的大小与颜色的渲染,渲染器会消耗更多资源plt.plot
中,散点基本都彼此复制,因此整个数据集中所有点的颜色、尺寸只需要配置一次Matplotlib 相关阅读:
[Python3] Matplotlib —— (一) 入门基础
[Python3] Matplotlib —— (二) 简易线形图
总结自《Python数据科学手册》