平行坐标可视化

科技资讯 投稿 5700 0 评论

平行坐标可视化

对于有$m$个特征,$n$个样本的数据,平行坐标可视化图中,横轴均匀列出$m$个特征,每个特征生成一个纵轴,其中每个样本就表示为穿越这些纵轴的折线。实现代码如下:

import numpy as np import matplotlib.pyplot as plt def parallel_coordinates(data, line_c='red', axis_alpha = 0.5, line_alpha = 0.05: n, m = data.shape mi, ma = np.min(data, 0, keepdims=True, np.max(data, 0, keepdims=True data = (data - mi / (ma - mi # 创建一个 Figure 对象和一个 Axes 对象 fig, ax = plt.subplots( ax.spines['right'].set_visible(False ax.spines['top'].set_visible(False ax.spines['left'].set_visible(False ax.spines["bottom"].set_alpha(axis_alpha ax.tick_params(axis='y', length=0, labelleft=False ax.tick_params(axis='x', length=2, colors=(0, 0, 0, axis_alpha ax.set_xticks(np.arange(m, np.arange(m, alpha = axis_alpha ax.set_xlabel('Features' ax.set_ylabel('Values' # 画折线 x = np.arange(m for d in data: ax.plot(x, d, c=line_c, alpha=line_alpha # 画坐标轴 for i in range(m: ax1 = ax.twinx( ax1.spines['top'].set_visible(False ax1.spines['left'].set_visible(False ax1.spines['bottom'].set_visible(False ax1.spines["right"].set_position(("data", i ax1.spines["right"].set_alpha(axis_alpha ax1.tick_params(axis='y', length=2, colors=(0, 0, 0, axis_alpha ax1.set_ylim(ax.get_ylim( new_ticks = ['%.2f'%i for i in np.linspace(mi[0, i], ma[0, i], 5] ax1.set_yticks(np.linspace(0, 1, 5, new_ticks, alpha = axis_alpha plt.show( # samp.shape = [n, m] parallel_coordinates(samp

下图展示了对异常检测标准数据集"http"的部分抽样的可视化结果:

可视化结果把所有$n\times m$个数据都表示在一张图中,比较全面,但对横坐标的特征顺序敏感,不相邻特征之间的模式人眼无法观察。如果要观察某两个特征之间的关系,可以使它们的位置相邻。

编程笔记 » 平行坐标可视化

赞同 (27) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽