如何可视化一个变量是连续的而另一个是分类的数据?

机器算法验证 分类数据 散点图 多类
2022-04-12 13:42:28

这个问题非常简单,但我一直在努力为此获得正确的脚本。

我的数据集如下:

HZ  Condition
  5     A
  6     A
  3     A
  4     A
 10     B
  8     B
 11     B
 13     B      

我想建立一个散点图来可视化 A 中的 HZ 和 B 中的 Hz 之间的相关性。

我认为它应该表示为 x 表示“HZ”与“Condition_A”交互,y 表示“HZ”与“Condition_B”交互,分组为“Condition”。也许我没有正确整理我的数据,但我想知道是否有办法直接进行此操作,而无需添加更多列(因为这是具有许多其他变量的数据集的一部分)。


谢谢大家的回复。我不使用箱线图的原因是,正如尼克考克斯所指出的,我想显示 HZ 数据点的分布。我应该在我原来的帖子中更好地解释它,但目的是检查 HZ 在每种情况下是增加还是减少,这就是为什么起初我认为 x 轴带有“HZxA”而 y 轴带有“HZ $B”。我将使用这个变量来控制另一个变量的效果大小。所以我会尝试使用 Nick Cox 视觉表示的例子,谢谢!我也没有提到我正在使用 R,所以脚本确实非常感谢,谢谢 Robert Long 和 Cdalitz。

4个回答

我喜欢显示原始数据,但使用比点图更好地扩展到大 N 的方法,因此我使用按分类变量分层的尖峰直方图。我在直方图的底部添加了分位数间隔。如果使用 Rplotly图形,您可以关闭和打开分位数间隔,同样适用于平均值和中位数。可以在这里找到一个示例以及其他显示,例如扩展箱形图和简单的尖峰直方图。

有几个选择浮现在脑海中。第一个是一个简单的点图:

HZ <- c(5,6,3,4,10,8,11,13)
Cond <- c(rep("A",4), rep("B",4))
dt <- data.frame(HZ, Cond)
library(ggplot2)
ggplot(dt, aes(y = HZ, x = Cond, color = Cond)) + geom_point()

在此处输入图像描述

第二个是箱线图:

ggplot(dt, aes(y = HZ, x = Cond, color = Cond)) + geom_boxplot()

在此处输入图像描述

这个问题没有提到 R 以及如何在 R 或任何其他软件中对此进行编码在任何情况下都是题外话。

作为原则上的答案,还请考虑

在此处输入图像描述

我的意思不是这个例子——许多其他的展示也可以很好地工作——而是一些适用于这样的帖子的小原则。

  1. 箱线图不能很好地利用 2 个组的可用空间,对于任何其他少量组也是如此。这里的箱线图是一个简化的总结,带有极端的胡须,可以辩护,因为细节是单独显示的。

  2. 也可以显示各个数据点。对于整数值,完整数据集中的关系范围非常大,因此直接显示关系的一些方法很有帮助。在这里,分位数图显示可以清楚地显示关系:堆叠或抖动数据点几乎或完全一样可以工作。

  3. 没有理由假设中位数和四分位数是唯一感兴趣的摘要。此处的水平线显示均值,在数据示例中恰好相同。在其他数据集中,其他摘要可能更有意义,例如几何平均值或修剪平均值。

这些是单变量数据。因此,您可能不是在寻找散点图,而是在寻找箱线图:

boxplot(HZ ~ Condition, x)

其中x表示包含您的数据的数据框。这只是汇总统计(中位数、四分位数)的显示。为了显示原始点,唯一的内置函数似乎是dotchart

dotchart(x$HZ, labels=x$Condition, col=as.numeric(x$Condition)

但这为每个点提供了自己的行。显然,使用内置工具,需要一种解决方法:首先绘制一个空图,然后使用 points 添加

# we must use border="white",
# because type="n" is ignored for categorial x-values
plot(x$Condition, x$HZ, border="white")
points(x$Condition, x$HZ, col=x$Condition)