文章目录
绘制散点图
代码
import matplotlib.pyplot as plt
import numpy as np
# 产生50对服从正态分布的样本点
nbPointers = 50
x = np.random.standard_normal(nbPointers)
y = np.random.standard_normal(nbPointers)
# 固定种子,以便实验结果具有可重复性
np.random.seed(19680801)
colors = np.random.rand(nbPointers)
area = (30 * np.random.rand(nbPointers)) ** 2
plt.scatter(x, y, s=area, c=colors, alpha=0.5)
plt.show()
运行结果
代码分析
-
plt.scatter()
不支持将点与点连成线
- 在第【14】行代码中,
scatter()
函数的参数:
- 参数
s
就是plot()
函数中的markersize
。本例中它的值是一个随机大小的圆,这些随机大小的圆由第【11】行代码产生。
- 参数
c
表示点的颜色
- 参数
alpha
表示透明度,其大小不超过1,数值越大越不透明。
鸢尾花数据集中的散点图
代码
import matplotlib.pyplot as plt
import numpy as np
# 读取文本数据
data = []
with open('iris.csv', 'r') as file:
lines = file.readlines() # 逐行读取数据
for line in lines: # 对每行数据进行分析
temp = line.split(',')
data.append(temp)
# 将列表转换为NumPy数组,方便后续处理
data_np = np.array(data)
# 不读取最后一列,并将部分数值转换为浮点数
data_np = np.array(data_np[:, :-1]).astype(float)
print(data_np)
# 设置特征名称
feature_name = ['sepal length', 'sepal width', 'petal length', 'petal width']
# 创建画布,包含3*2个子图,画布大小为(20,10)
fig, axes = plt.subplots(3, 2, figsize=(20, 10))
# 为在Matplotlib中显示中文,设置特殊字体
plt.rcParams['font.sans-serif'] = ['SimHei']
# 设置总标题
fig.suptitle('鸢尾花散点图', fontsize=25)
# 获取不同的特征组合,两两组合绘制散点图
i = 0
for x in range(data_np.shape[1]):
for y in range(x + 1, data_np.shape[1]):
X = data_np[:, x]
Y = data_np[:, y]
axes[i % 3][i % 2].scatter(X[:40], Y[:40],
marker='x', c='b', label='setosa')
axes[i % 3][i % 2].scatter(X[40:80], Y[40:80],
marker='o', c='r', label='versicolor')
axes[i % 3][i % 2].scatter(X[80:], Y[80:],
marker='*', c='g', label='virginica')
axes[i % 3][i % 2].set_xlabel(feature_name[x], fontsize=10)
axes[i % 3][i % 2].set_ylabel(feature_name[y], fontsize=10)
axes[i % 3][i % 2].legend(loc='best')
i += 1
plt.show()
运行结果