比较许多性能曲线:请求数据可视化提示

机器算法验证 数据可视化
2022-04-13 18:08:21

我的请求

我希望比较许多性能曲线。在一个图中绘制所有曲线(带有误差线)会使事情变得一团糟。我对整理我的情节并更容易比较曲线的方法感兴趣。

这不是一个编程问题:不需要提供代码(尽管如果你愿意,你可以提供),关于如何改进情节的口头描述就足够了。

背景资料

我的审阅者要求将我新发现的分析方法与各种众所周知的替代方法进行比较。所以我正在运行数据模拟;其中很多。这些模拟基于可以调整的大量参数生成人工数据,并且每种方法都应用于数据集。该研究的目的是展示每种分析方法如何响应参数的变化。

我会选择一个参数并开始更改它。对于每个参数值,我运行模拟大约 100 次,生成 100 个数据集。然后我在每个数据集上运行每种分析方法,为参数和每种方法的值生成 100 次运行的平均值和标准偏差。

下面的 Python 代码生成了一个我希望可视化的数据的玩具示例:

import numpy as np
from matplotlib import pyplot as plt

method_names = ['methodA', 'methodB', 'methodC', 'methodD', 'methodE']
parameter_values = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Mean performance of each method for each value of the parameter. Each
# column corresponds to a method, each row to a value of the parameter.
means = np.array([
  [ 0.33310882,  0.55161232,  0.71036095,  0.25674653,  0.69863089],
  [ 0.19724624,  0.61167882,  0.6102655 ,  0.30949569,  0.58623639],
  [ 0.1356461 ,  0.63687691,  0.56813548,  0.31290411,  0.52985315],
  [ 0.10735517,  0.63363713,  0.51832115,  0.3246267 ,  0.4784114 ],
  [ 0.08432418,  0.64023433,  0.48225627,  0.35112391,  0.43079314],
  [ 0.08762582,  0.63364727,  0.43214314,  0.34367382,  0.36650684],
  [ 0.08586268,  0.63693999,  0.43351215,  0.33518338,  0.34467524],
  [ 0.0741298 ,  0.64564111,  0.40943309,  0.36357895,  0.312961  ],
  [ 0.06163042,  0.62847129,  0.41779745,  0.36114122,  0.34724645],
  [ 0.07159902,  0.63879868,  0.38652708,  0.366425  ,  0.28765962]
])

# Standard deviation of the performance of each method for each value of the
# parameter. Each column corresponds to a method, each row to a value of the
# parameter.
stds = np.array([
  [ 0.11254176,  0.10631446,  0.06812396,  0.08699054,  0.06980061],
  [ 0.08628651,  0.10833594,  0.09483841,  0.1183296 ,  0.1024852 ],
  [ 0.06817238,  0.10773644,  0.12192901,  0.1277693 ,  0.13846137],
  [ 0.06689446,  0.10816033,  0.12069033,  0.11992669,  0.13071808],
  [ 0.05422928,  0.10254246,  0.12434407,  0.13343013,  0.1383579 ],
  [ 0.06296734,  0.1000487 ,  0.14946763,  0.13094066,  0.1616725 ],
  [ 0.06012606,  0.10337348,  0.13938654,  0.10372903,  0.16188025],
  [ 0.05196553,  0.10243771,  0.12804723,  0.12445235,  0.15411106],
  [ 0.04714007,  0.09093044,  0.14208883,  0.1209349 ,  0.16194828],
  [ 0.05830223,  0.1081157 ,  0.15168251,  0.12709928,  0.17751713]
])

下面是一个幼稚的可视化可能的样子:

示例可视化

这些只是 5 条曲线... Í 有大约 15 条曲线可供比较。

边注

改善绘图的明显方法是仅显示选择的曲线。我试图专注于论文中最有趣的部分,并将其余部分放到补充信息部分。我的情节越好,我必须消除的曲线就越少。

1个回答

正如线条图的颜色和线条粗细建议中的建议一样,小倍数是有重叠绘图问题的绘图的常见解决方案。这是您提供的 5 条曲线的示例。

在此处输入图像描述

这是很多信息,但很容易看出 A、C 和 E 都在减少。对于高参数值,C 和 E 的方差增加,而 B 和 D 相当恒定,而 A 触底(我猜根据图表,指标必须是正值。)小倍数可以扩展到 15 条曲线,但是当使面板更小 IMO 时,您应该在更小的空间中使面板更加简约,例如抛弃网格线,使刻度线更小更稀疏等。

误差线使过度绘图问题更加成问题,因此如果轨迹重叠,则更难将多个误差线填充到一个图中。我喜欢的另一种方法是使用半透明区域而不是点和条。我的标签可能需要做一些工作,但这里是这些曲线的一个例子(加减两个标准偏差,使区域更宽一些)。

在此处输入图像描述

我不得不将 E 放在单独的面板中,因为它遮挡了 A 和 C。鉴于区域的正确颜色,看到两个区域的重叠并不难,但三个区域非常困难。