【问题标题】:visualize associations between two groups of data可视化两组数据之间的关联
【发布时间】:2010-11-30 05:50:09
【问题描述】:

每个数据点都有一对 A 和 B,并且 A 中有多个条目,B 中有多个整体。即多个综合征和多个诊断,尽管对于每个数据点,只有一个综合征-诊断对。

非常感谢示例、建议或想法

这就是数据的样子。我想看看 A 和 B 的值之间的联系(有多少 GG 链接到 TT 等)。两者都是名义数据类型。

ID,A ,B 
1,GG,TT
2,AA,SS
3,BB,XX
4,DD,SS
5,DD,TT
6,CC,XX
7,HH,ZZ
8,AA,TT
9,CC,RR
10,DD,ZZ
11,AA,XX
12,AA,TT
13,DD,SS
14,DD,XX
15,AA,YY
16,CC,ZZ
17,FF,SS
18,FF,XX
19,BB,VV
20,GG,VV
21,GG,SS
22,AA,RR
23,AA,TT
24,AA,SS
25,CC,VV
26,CC,TT
27,FF,RR
28,GG,UU
29,CC,TT
30,BB,ZZ
31,II,TT
32,FF,RR
33,BB,SS
34,GG,YY
35,FF,RR
36,BB,VV
37,II,RR
38,CC,YY
39,FF,VV
40,AA,XX
41,AA,ZZ
42,GG,VV
43,BB,UU
44,II,UU
45,II,SS
46,DD,SS
47,AA,UU
48,BB,VV
49,GG,TT
50,BB,TT

【问题讨论】:

  • 请提供示例数据集-谢谢

标签: r


【解决方案1】:

由于您的数据是二分的,我建议在一侧绘制第一个因子中的点,另一侧绘制另一个因子中的点,它们之间有线条,如下所示:

我用来生成这个的代码是:

## Make up data.
data <- data.frame(X1=sample(state.region, 10),
                   X2=sample(state.region, 10))

## Set up plot window.
plot(0, xlim=c(0,1), ylim=c(0,1),
     type="n", axes=FALSE, xlab="", ylab="")

factor.to.int <- function(f) {
  (as.integer(f) - 1) / (length(levels(f)) - 1)
}

segments(factor.to.int(data$X1), 0, factor.to.int(data$X2), 1,
         col=data$X1)
axis(1, at = seq(0, 1, by = 1 / (length(levels(data$X1)) - 1)),
     labels = levels(data$X1))
axis(3, at = seq(0, 1, by = 1 / (length(levels(data$X2)) - 1)),
     labels = levels(data$X2))

【讨论】:

  • 以下是将 Jonathan 的技术应用于示例数据集时应该得到的结果:i33.tinypic.com/5ey26o.png
  • 不错。查看输出,我认为在其中一个因素上进行颜色编码可能会很好。
【解决方案2】:

谢谢!我认为 Jonathon 和 Thierry 给出的链接图示例可以最好地可视化每个类中元素之间的连接性。蒂埃里的第二个显示幅度绝对是我要开始的地方。

更新 感谢大家的想法和提示!

我遇到了具有可视化此类数据功能的二分包。我认为这是我试图展示的关系的清晰可视化。

做过:

    library(bipartite)
    dataset <- data.frame(
         A = sample(letters[1:5], 200, prob = runif(5), replace = TRUE), 
         B = sample(LETTERS[20:26], 200, prob = runif(7), replace = TRUE)
     )
    datamat <- as.matrix(table(dataset$A, dataset$B))
    visweb(datamat, text = "interaction", textsize = .8)

给予: visweb result

无法以新用户身份输入图像:(

【讨论】:

  • 虽然,我现在意识到我需要不同的 y 轴,我发现这在 ggplot 中是不可能的
  • 你可以使用 geom_text() 来放置标签
【解决方案3】:

这就是我所做的。较深的颜色表示 A 和 B 的更重要的组合。

dataset <- data.frame(A = sample(LETTERS[1:5], 200, prob = runif(5), replace = TRUE), B = sample(LETTERS[1:5], 200, prob = runif(5), replace = TRUE))
Counts <- as.data.frame(with(dataset, table(A, B)))
library(ggplot2)
ggplot(Counts, aes(x = A, y = B, fill = Freq)) + geom_tile() + scale_fill_gradient(low = "white", high = "black")

或者如果你喜欢线条

library(ggplot2)
dataset <- data.frame(A = sample(letters[1:5], 200, prob = runif(5), replace = TRUE), B = sample(letters[1:5], 200, prob = runif(5), replace = TRUE))
Counts <- as.data.frame(with(dataset, table(A, B)))
Counts$X <- 0
Counts$Xend <- 1
Counts$Y <- as.numeric(Counts$A)
Counts$Yend <- as.numeric(Counts$B)
ggplot(Counts, aes(x = X, xend = Xend, y = Y, yend = Yend, size = Freq)) +
geom_segment() + scale_x_continuous(breaks = 0:1, labels = c("A", "B")) + 
scale_y_continuous(breaks = 1:5, labels = letters[1:5])

第三个选项使用 geom_text() 为数据点添加标签。

library(ggplot2)
dataset <- data.frame(
    A = sample(letters[1:5], 200, prob = runif(5), replace = TRUE), 
    B = sample(LETTERS[20:26], 200, prob = runif(7), replace = TRUE)
)
Counts <- as.data.frame(with(dataset, table(A, B)))
Counts$X <- 0
Counts$Xend <- 1
Counts$Y <- as.numeric(Counts$A)
Counts$Yend <- as.numeric(Counts$B)
ggplot(Counts, aes(x = X, xend = Xend, y = Y, yend = Yend)) + 
geom_segment(aes(size = Freq)) + 
scale_x_continuous(breaks = 0:1, labels = c("A", "B")) + 
scale_y_continuous(breaks = -1) + 
geom_text(aes(x = X, y = Y, label = A), colour = "red", size = 7, hjust = 1, vjust = 1) + 
geom_text(aes(x = Xend, y = Yend, label = B), colour = "red", size = 7, hjust = 0, vjust = 0)

【讨论】:

  • 谢谢蒂埃里,我想通过某种方式查看每对之间的联系。所以我可以看到 A 组中的哪些项目导致 B 组中的项目。我将附上一个数据集示例。
【解决方案4】:

也许是马赛克图:

X <- structure(list(
  ID = 1:50,
  A = structure(c(6L, 1L, 2L, 4L, 4L, 3L, 7L, 1L, 3L, 4L, 1L, 1L, 4L, 4L, 1L, 3L, 5L, 5L, 2L, 6L, 6L, 1L, 1L, 1L, 3L, 3L, 5L, 6L, 3L, 2L, 8L, 5L, 2L, 6L, 5L, 2L, 8L, 3L, 5L, 1L, 1L, 6L, 2L, 8L, 8L, 4L, 1L, 2L, 6L, 2L), .Label = c("AA","BB", "CC", "DD", "FF", "GG", "HH", "II"), class = "factor"),
  B = structure(c(3L, 2L, 6L, 2L, 3L, 6L, 8L, 3L, 1L, 8L, 6L, 3L, 2L, 6L, 7L, 8L, 2L, 6L, 5L, 5L, 2L, 1L, 3L, 2L, 5L, 3L, 1L, 4L, 3L, 8L, 3L, 1L, 2L, 7L, 1L, 5L, 1L, 7L, 5L, 6L, 8L, 5L, 4L, 4L, 2L, 2L, 4L, 5L, 3L, 3L), .Label = c("RR", "SS", "TT", "UU", "VV", "XX", "YY", "ZZ"), class = "factor")
  ), .Names = c("ID", "A", "B"), class = "data.frame", row.names = c(NA, -50L)
)

mosaicplot(with(X,table(A,B)))

为您提供示例数据集:

【讨论】:

    猜你喜欢
    • 2020-06-26
    • 1970-01-01
    • 2013-09-27
    • 2020-02-08
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    相关资源
    最近更新 更多