使用 ggplot 可视化大量变量计数的最佳方法?

best way to visualize counts for very large number of variables with ggplot?

我目前正在 运行 特定数据集的 LASSO 模型。在 17 个不同的模型中发现了数百个变量,我很想知道在多少个模型中找到了一个特定的变量。我认为在 R 中执行此操作的最佳方法是创建一个箱线图,其中一个轴上有变量名称,它们出现在另一个轴上的次数。但是,由于存在的变量数量众多,该图的可读性不是很好。这是目前的样子:

这是我编写的用于创建情节的代码:

dt1 %>% ggplot(aes(y=reorder(Variable_Name,-desc(n)),x=n)) + geom_bar(stat="identity",
               width=.5,color="black",fill="grey") +
  scale_x_continuous(name = "Count",breaks = c(0,1,2,3,4,5)) + ylab(NULL)

所以我认为条形图不是呈现此信息的最佳方式。有没有人对使用什么来更好地可视化数据有任何建议?维恩图在这种情况下效果最好吗?

编辑:

我采纳了 Timon 的建议,这就是我想出的。我仍然面临一些 space 问题,但它绝对比以前的尝试更可取。

由于您不提供数据,我们无法重现您的绘图或以不同方式可视化数据。但是,我可以想象将变量名称绘制为 geom_textgeom_label 可能会有用(使用抖动来避免重叠)。或者,您可能想查看 wordclouds,其中变量名称的相对大小将表示包含它们的模型数量。

一个例子:

library(dplyr)
library(ggplot2)
library(ggrepel)
set.seed(123)
data_test <- tibble(var_names = c(paste0("var", 1:50)),
                    count = c(rep(1, 30), rep(2, 10), rep(3, 5), rep(4, 3), rep(5, 2)),
                    y_random = c(runif(50, min = -1, max = 1)))

data_test %>% 
  ggplot(aes(x = count, y = y_random, label = var_names, color = as.factor(count))) +
  geom_text_repel(max.overlaps = 50) +
  theme_minimal() +
  theme(legend.position = "None",
        axis.ticks.y = element_blank(),
        axis.text.y = element_blank()) +  
  labs(x = "Count",
       y = "Variable name")

输出:

编辑和另一个例子:

正如 Joel 在评论中提到的,树状图也可能有帮助 - 可能更好,因为它减少了图上的白色 space。使用我上面的数据,这看起来如下(继续上面的包和数据):

library(treemapify)
library(stringr)

# summarize data
data_collapse <- data_test %>% 
  group_by(count) %>% 
  summarize(n = n(),
            var_names = paste(var_names, collapse = ", "), .groups = "keep") %>% 
  ungroup()

# plot
data_collapse %>% 
  ggplot(aes(area = n, fill = as.factor(count), label = str_wrap(var_names))) +
  geom_treemap() +
  geom_treemap_text(place = "centre") +
  theme(legend.position = "bottom") +
  labs(fill = "Count")

输出:

当我汇总数据时,我会为每个计数连接所有变量标签。在情节中,我使用 stringr 包中的 str_wrap() 函数来根据需要自动插入换行符。