r - R中的时间线气泡图?
问题描述
我正在尝试在 R (原始帖子)中复制下面的图像。我看过类似的帖子(帖子 1和帖子 2),但没有一个与这个情节相似。我只是想知道是否有人知道如何在 R 中做类似的事情。有几个观察结果:
- 气泡不重叠
- 较小的气泡往往更靠近轴(但并非总是如此!)
- 气泡分为两类
我相信来自帖子 1的数据会有所帮助!
https://docs.google.com/spreadsheets/d/11nq5AK3Y1uXQJ8wTm14w9MkZOwAxHHTyPyEvUxCeGVc/edit?usp=sharing
太感谢了,
解决方案
好的,这只是人们可以用来制定更好的问题答案的起点。它使用 packcircles 包来(令人惊讶地)打包圈子。它并不符合您的所有标准,但可以作为一个有用的起点。我们只是假设eruptions
忠实数据集中的列是您的时间变量。
library(packcircles)
#> Warning: package 'packcircles' was built under R version 4.0.2
library(ggplot2)
library(scales)
library(ggrepel)
# Setup some data, suppose we'd like to label 5 samples
set.seed(0)
faith2 <- faithful
faith2$label <- ""
faith2$label[sample(nrow(faith2), 5)] <- LETTERS[1:5]
# Initialise circle pack data
init <- data.frame(
x = faith2$eruptions,
y = runif(nrow(faith2)),
areas = rescale(faith2$waiting, to = c(0.01, 0.1))
)
# Use the repelling layout
res <- circleRepelLayout(
init,
xlim = range(init$x) + c(-1, 1),
ylim = c(0, Inf),
xysizecols = c(1, NA, 3),
sizetype = "radius",
weights = 0.1
)
# Prepare for ggplot2
df <- circleLayoutVertices(res$layout)
df <- cbind(df, faith2[df$id,])
这表明圆圈相对于我们的假时间变量是合理放置的。
# Plot
ggplot(df, aes(x, y, group = id)) +
geom_polygon(aes(fill = eruptions,
colour = I(ifelse(nzchar(label), "black", NA)))) +
scale_fill_viridis_c() +
coord_equal()
这表明圆的大小合理地对应于不同的变量。
ggplot(df, aes(x, y, group = id)) +
geom_polygon(aes(fill = waiting,
colour = I(ifelse(nzchar(label), "black", NA)))) +
scale_fill_viridis_c() +
coord_equal()
由reprex 包于 2020-07-11 创建(v0.3.0)
这几乎没有缺陷,特别是它不满足第二个标准(圆圈没有拥抱轴)。此外,由于我无法理解的原因,packcircles 布局无法放置大约 12% 的数据点,这些数据点分配NaN
在df
. 无论如何,希望比我聪明的人会在这方面做得更好。
推荐阅读
- outlook-restapi - Outlook weblink 并不总是正确打开邮件
- java - Spring Boot 应用程序中未调用自定义领域
- ios - UIDocumentPickerController 访问被拒绝 Cocoa 错误 257
- linux - MXLinux 中不显示 Unicode 图标
- javascript - 关闭模式时显示不需要的内容
- java - 使用 arrayList 指针而不是多个循环?
- php - 已签名的pdf上的双重签名
- java - 在java中的公式中使用电子
- microsoft-teams - MS Teams 个人选项卡未在桌面版本中显示/呈现
- c - 如何在最后一行输出 %?