绘制连接所有可能的数据点对的线段,按线段斜率的符号着色(绘制 kendall tau)
draw segments connecting all possible datapoint pairs, colouring by sign of segment slope (plotting kendall tau)
我的问题与 Davis 和 Chen(2006 年)的 article 相关,其中展示了一种可视化 Kendall 的两个变量之间非参数相关性的 tau 度量的方法。
给定散点图中的多个数据点,每个点都通过线段连接到所有其他点。符合以下条件的线段可以是不同的颜色:
- 线段是黑色如果它的斜率是正;
- 线段是红色如果它的斜率是负;
- 线段为蓝色是其斜率为0(水平平线);
- 线段是黑色如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)
的数据集
有很多方法,但您需要构建自己的 data.frame 细分。例如
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'))
我的问题与 Davis 和 Chen(2006 年)的 article 相关,其中展示了一种可视化 Kendall 的两个变量之间非参数相关性的 tau 度量的方法。
给定散点图中的多个数据点,每个点都通过线段连接到所有其他点。符合以下条件的线段可以是不同的颜色:
- 线段是黑色如果它的斜率是正;
- 线段是红色如果它的斜率是负;
- 线段为蓝色是其斜率为0(水平平线);
- 线段是黑色如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)
的数据集有很多方法,但您需要构建自己的 data.frame 细分。例如
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'))