Python 散点图
matplotlib 绘制散点图的函数有 mptplotlib.pyplot.plot()、matplotlib.pyplot.scatter(),多数情况下使用 scatter() 函数。
scatter() 函数主要参数:
plt.scatter(x,y, # array_like, 数据点在坐标系中的位置
s=None, # 标量或array_like, 标记点的大小, 可选参数
c=None, # 标记点的颜色,默认值为 'b'
marker=None, # 标记样式,默认为 'o'
cmap=None, # 颜色映射
norm=None, #
vmin=None,
vmax=None,
alpha=None, # 透明度, [0, 1] 上的浮点数
linewidths=None, # 线宽
verts=None,
edgecolors=None, # 标记的边缘颜色, 默认为 'face',表示边缘颜色与面颜色相同
hold=None,
data=None,
**kwargs)
一、用 plot() 绘制散点
示例 1
import numpy as np
import matplotlib.pyplot as plt
# 生成 1000 个服从标准正态分布的样本
y = np.random.randn(1000)
# 绘制散点图
plt.plot(x, linestyle='', marker='.'); # 设置为不画线,标记标记点为圆点
plt.plot(x, linestyle='', marker='.') 可以简写为 plt.plot(x, '.')
plot() 函数默认绘制折线图,如果不是简写方式,只是省略 linestyle (略写为 ls) 参数,
而是写为 plt.plot(x, marker='.'); 则图形如下:
2、plot() 在只提供 y 值,不提供 x 值时,默认将 序列或数组 y 索引值当作 x
所以,示例 1 的完整代码应该是:
import numpy as np
import matplotlib.pyplot as plt
# 生成 1000 个服从标准正态分布的样本
y = np.random.randn(1000)
x = [i for i, _ in enumerate(y)]
# 绘制散点图
plt.plot(x, y, linestyle='', marker='.');
对上述代码略作修正,使图表美观一点
import numpy as np
import matplotlib.pyplot as plt
# 生成 1000 个服从标准正态分布的样本
y = np.random.randn(1000)
x = [i for i, _ in enumerate(y)]
# 图表元素中正常显示中文字符
plt.rcParams['font.sans-serif'] = 'SimHei'
# 坐标轴刻度标签正常显示负号
plt.rcParams['axes.unicode_minus'] = False
# 绘制散点图
plt.plot(x, y, linestyle='', marker='.')
plt.xticks(size=12, color='grey') # x 轴刻度标签
plt.yticks(size=12, color='grey') # y 轴刻度标签
plt.title('散点图', size=14, color='y'); # 添加图表标题
二、用 scatter() 绘制散点图
示例2
import numpy as np
import matplotlib.pyplot as plt
# 在区间 [a, b] 上均匀地取指定数量的值
x = np.linspace(0.05, 10, 1000)
np.random.seed(22)
# 生成 1000 个服从标准正态分布的样本
y = np.random.randn(1000)
plt.scatter(x, y);
注:标记点默认为圆点,颜色默认为 blue, 边缘颜色默认与标记点的颜色一致。
对示例2 的图形进行美化
import numpy as np
import matplotlib.pyplot as plt
# 在区间 [a, b] 上均匀地取指定数量的值
x = np.linspace(0.05, 10, 1000)
np.random.seed(22)
y = np.random.randn(1000)
# 图表元素中正常显示中文字符
plt.rcParams['font.sans-serif'] = 'SimHei'
# 坐标轴刻度标签正常显示负号
plt.rcParams['axes.unicode_minus'] = False
plt.scatter(x, y,
s=87, # 标记点大小
marker='*', # 标记点的样式 星号
c='g', # green 绿色
linewidths=0.41,
edgecolor='y', # 边缘颜色
label='scatter figure')
plt.xticks(size=12, color='grey') # x 轴刻度标签
plt.yticks(size=12, color='grey') # y 轴刻度标签
plt.title('散点图', size=14, color='y'); # 添加图表标题
plt.legend() # 添加图例
# 设置坐标轴刻度范围
plt.xlim(-0.5, 10.5)
plt.ylim(-3.5, 3.5);
非学无以广才,非志无以成学。