график пузыря шкалы времени в R? - PullRequest
0 голосов
/ 11 июля 2020

Я пытаюсь воспроизвести изображение ниже в R ( Исходный пост ). Я видел похожие сообщения ( Сообщение 1 и Сообщение 2 ), но ни один похожий на этот сюжет. Мне просто интересно, знает ли кто-нибудь, как сделать что-то подобное в R. Есть пара наблюдений:

  1. Пузыри не перекрываются
  2. Более мелкие пузыри, как правило, располагаются ближе к оси (но не всегда!)
  3. Пузыри делятся на две категории

Я уверен, что данные из сообщения 1 будут полезны!

https://docs.google.com/spreadsheets/d/11nq5AK3Y1uXQJ8wTm14w9MkZOwAxHHTyPyEvUxCeGVc/edit?usp=sharing

Большое спасибо,

Сюжет NYT

1 Ответ

0 голосов
/ 11 июля 2020

Хорошо, это только отправная точка, которую люди могут использовать, чтобы сформулировать лучший ответ на вопрос. Он использует пакет 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()

And this is showing that the circle size is reasonably corresponding to a different variable.

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()

Created on 2020-07-11 by the пакет REPEX (v0.3.0)

В этом немного fl aws , в частности, не удовлетворяет второму критерию (круги не охватывают ось). Кроме того, по причинам, не связанным с моим пониманием, макет packcircles не может разместить около 12% точек данных, которым назначено NaN в df. В любом случае, надеюсь, кто-нибудь умнее меня с этим справится лучше.

...