【问题标题】:draw segments connecting all possible datapoint pairs, colouring by sign of segment slope (plotting kendall tau)绘制连接所有可能数据点对的线段,按线段斜率的符号着色(绘制 kendall tau)
【发布时间】:2020-06-09 08:04:48
【问题描述】:

我的问题与 Davis 和 Chen (2006) 的 article 相关,其中展示了一种可视化 Kendall 的两个变量之间非参数相关性的 tau 度量的方法。

给定散点图中的多个数据点,每个点通过线段连接到所有其他点。一条线段可以有不同的颜色,遵循以下标准:

  1. 如果斜率为,则线段为黑色
  2. 如果斜率为,则线段为红色
  3. 线段是蓝色是它的斜率为0(水平平线);
  4. 线段为黑色,如 1。如果其斜率未定义(垂直线)。

这是原始文章中的一个示例:

我的问题是我可以生成散点图,但不能生成连接所有可能点对的线段,根据上述标准改变颜色。

这是一个数据集的例子:

dataset <- dplyr::tibble(alpha = c(1, 5, 7, 8, 9, 10, 11, 12), 
              beta =  c(7, 7, 5, 4, 3, 14, 15, 18))

我可以生成这个:

ggplot2::ggplot(dataset, aes(x = alpha, y = beta)) + geom_point()

但不是这个:

注意。该解决方案必须可推广到具有大量数据点(~1000)的数据集

【问题讨论】:

  • See here 提出一个人们可以帮助解决的 R 问题。这包括数据样本和所有必要的代码。现在这对 SO 来说太宽泛了
  • 你试过什么?我想给定一组点,你的第一个任务是使用expand.grid(或tidyr::completedata.table::CJ)分配端点并计算每个斜率,然后使用aes(..., color=slope),如果需要,使用@ 987654335@.
  • 嗨卡米尔和 r2evans。感谢您的建议。我重新制定了我的问题,添加了示例数据集和代码以显示我目前能够实现的目标。

标签: r ggplot2 segment


【解决方案1】:

有很多方法,但您需要构建自己的数据段。例如

library(tidyverse)

pd <- dataset %>% 
  mutate(d = map(row_number(), function(x) slice(., -x) %>% rename(x = alpha, y = beta))) %>% 
  unnest(d) %>% 
  mutate(
    slope = (y - beta) / (x - alpha),
    cat = case_when(
      is.infinite(slope) | slope > 0 ~ 'a', 
      slope < 0 ~ 'b',
      slope == 0 ~ 'c'
    )
  )

ggplot() +
  geom_segment(aes(alpha, xend = x, beta, yend = y, color = cat), pd) +
  geom_point(aes(alpha, beta), dataset) +
  scale_color_manual(values = c(a = 'black', b = 'red', c = 'blue'))

【讨论】:

    猜你喜欢
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    相关资源
    最近更新 更多