从 R 中的两个数据框创建聚类堆积条形图
creating clustered stacked bar charts from two data frames in R
我正在为此苦苦挣扎,因为我没有使用 R 的经验,只是开始使用它。我从两个文件中将两个 table 加载到 R 中。Table 具有相同的结构。 Table 1 看起来像这样:
SIZE XXX TIME-A XXX TIME-B YYY TIME-D YYY TIME-E
2 ... 59.21 ... 511.11 ... 55.31 ... 52.16
3 ... 54.32 ... 514.31 ... 53.91 ... 56.12
4 ... 5100.88 ... 566.9 ... 52.11 ... 545.73
和Table2:
SIZE XXX TIME-A XXX TIME-B YYY TIME-D YYY TIME-E
2 ... 9.21 ... 11.11 ... 5.31 ... 2.16
3 ... 4.32 ... 14.31 ... 3.91 ... 6.12
4 ... 100.88 ... 66.9 ... 2.11 ... 45.73
我想在 R 中创建一个集群堆叠图,这样 table 1 的 TIME-A 堆叠在 table 2 的 TIME-A 上,对于 TIME- B、TIME-D 和 TIME-E。然后将这四个堆叠条按照 SIZE 列进行聚类。因此,最终结果是有 3 个集群,每个集群有四个堆叠条,如所述。现在这似乎是一项艰巨的任务,因为我仍在努力将两个 table 的两列相互堆叠,而不是关于聚类部分。我不是在寻找答案(尽管我非常感谢:]),但也许一些带有示例的链接对解决问题非常有帮助。
最好将数据帧绑定在一起,然后使用 ggplot2:
制作多面图
# create an 'id' variable for dataframe
d1$id <- "d1"
d2$id <- "d2"
# bind them together in one
d <- rbind(d1,d2)
# melt the result into long format
md <- melt(d, id.vars=c("id","SIZE"))
library(ggplot2)
ggplot(md, aes(x=SIZE, y=value, fill=id)) +
geom_bar(stat="identity") +
facet_wrap(~ variable, scales = "free_y", nrow=1)
给出:
已用数据:
d1 <- structure(list(SIZE = 2:4, TIME.A = c(59.21, 54.32, 5100.88), TIME.B = c(511.11, 514.31, 566.9),
TIME.D = c(55.31, 53.91, 52.11), TIME.E = c(52.16, 56.12, 545.73)),
.Names = c("SIZE", "TIME.A", "TIME.B", "TIME.D", "TIME.E"), class = "data.frame", row.names = c(NA, -3L))
d2 <- structure(list(SIZE = 2:4, TIME.A = c(9.21, 4.32, 100.88), TIME.B = c(11.11, 14.31, 66.9),
TIME.D = c(5.31, 3.91, 2.11), TIME.E = c(2.16, 6.12, 45.73)),
.Names = c("SIZE", "TIME.A", "TIME.B", "TIME.D", "TIME.E"), class = "data.frame", row.names = c(NA, -3L))
我正在为此苦苦挣扎,因为我没有使用 R 的经验,只是开始使用它。我从两个文件中将两个 table 加载到 R 中。Table 具有相同的结构。 Table 1 看起来像这样:
SIZE XXX TIME-A XXX TIME-B YYY TIME-D YYY TIME-E
2 ... 59.21 ... 511.11 ... 55.31 ... 52.16
3 ... 54.32 ... 514.31 ... 53.91 ... 56.12
4 ... 5100.88 ... 566.9 ... 52.11 ... 545.73
和Table2:
SIZE XXX TIME-A XXX TIME-B YYY TIME-D YYY TIME-E
2 ... 9.21 ... 11.11 ... 5.31 ... 2.16
3 ... 4.32 ... 14.31 ... 3.91 ... 6.12
4 ... 100.88 ... 66.9 ... 2.11 ... 45.73
我想在 R 中创建一个集群堆叠图,这样 table 1 的 TIME-A 堆叠在 table 2 的 TIME-A 上,对于 TIME- B、TIME-D 和 TIME-E。然后将这四个堆叠条按照 SIZE 列进行聚类。因此,最终结果是有 3 个集群,每个集群有四个堆叠条,如所述。现在这似乎是一项艰巨的任务,因为我仍在努力将两个 table 的两列相互堆叠,而不是关于聚类部分。我不是在寻找答案(尽管我非常感谢:]),但也许一些带有示例的链接对解决问题非常有帮助。
最好将数据帧绑定在一起,然后使用 ggplot2:
制作多面图# create an 'id' variable for dataframe
d1$id <- "d1"
d2$id <- "d2"
# bind them together in one
d <- rbind(d1,d2)
# melt the result into long format
md <- melt(d, id.vars=c("id","SIZE"))
library(ggplot2)
ggplot(md, aes(x=SIZE, y=value, fill=id)) +
geom_bar(stat="identity") +
facet_wrap(~ variable, scales = "free_y", nrow=1)
给出:
已用数据:
d1 <- structure(list(SIZE = 2:4, TIME.A = c(59.21, 54.32, 5100.88), TIME.B = c(511.11, 514.31, 566.9),
TIME.D = c(55.31, 53.91, 52.11), TIME.E = c(52.16, 56.12, 545.73)),
.Names = c("SIZE", "TIME.A", "TIME.B", "TIME.D", "TIME.E"), class = "data.frame", row.names = c(NA, -3L))
d2 <- structure(list(SIZE = 2:4, TIME.A = c(9.21, 4.32, 100.88), TIME.B = c(11.11, 14.31, 66.9),
TIME.D = c(5.31, 3.91, 2.11), TIME.E = c(2.16, 6.12, 45.73)),
.Names = c("SIZE", "TIME.A", "TIME.B", "TIME.D", "TIME.E"), class = "data.frame", row.names = c(NA, -3L))