如何改进单变量分布的标准可视化?

机器算法验证 数据可视化
2022-03-28 06:47:44

我有一个数据集,其中包含单个连续值的大约 15,000 个标记观察值。绘制此类数据的最佳方法是什么?我正在玩各种直方图和密度图,但我似乎无法找出绘制这个数据集的最佳方法。有什么建议么?

我的数据如下所示:

 label     value  
-------   -------  
  foo       1.2  
  bar       6.2  
  baz       0.2  
  qux       4.7  
  ...       ...  

该数据集包含 15,000 个值,每个值都有一个唯一的标签。

我正在寻找如何最好地创建数据分布的可视化并查看异常值。这是我生成的两个候选图。两者都比我想要的更简化了数据。有没有其他方法可以绘制数据并以某种方式将标签集成到该图中?

密度图 箱形图

2个回答

一个既能满足查看整个分布又能允许空间放置标签的简单想法是使用抖动的一维点图。

在此处输入图像描述

在这个例子中,我只是任意选择了值超过 25 的点来标记,并使这些点半透明(即使有抖动,仍然有大量的过度绘图)。

这并不完美(我必须任意选择哪些点被认为是“异常值”,因此哪些点会得到标签)。同样在我在(SPSS)中制作的软件中,我不能将抖动限制在图形的 Y 维度上,因此在这种情况下,很多点都超出了逻辑范围(这是使用对数正态分布生成的随机数据,所以所有值都是正数)。

虽然我希望这是一个有用的绘图演示,但鉴于您的示例的外观,您肯定会考虑转换数据。如果您也需要帮助在 R 中生成类似的图表,我相信该站点的其他成员可以在 ggplot2 中生成一些示例以进行演示(我也期待其他建议!)

扩展@Andy 的想法,我建议采用这个替代方案,其中包含问题中包含的两个原始图:标记异常值

我使用以下代码在 R 中创建了这个图:

data <- data.frame( Id = paste('case',1:5000), x = exp(rnorm(5000)))

outlier.cut = 10

outliers <- data[ data$x > outlier.cut, ]
outliers <- outliers[ order(outliers$x), ]

png(filename = "labeled_outliers.png", width = 600, height = 600)

plot(density(data$x), main = 'Labeled Outliers')
rug( data$x, side = 1)
rug( data$x, side = 3)

unit <- (par('usr')[4]-par('usr')[3]) / ( dim(outliers)[1] + 5 )
outliers$y <- ( c(1:dim(outliers)[1]) * unit)

text(outliers$x, y = outliers$y, label = outliers$Id, cex = .65, srt = 0)

dev.off()