微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

Number of LASSO Models Variables are Present In

这是我为创建情节而编写的代码

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 的建议,这就是我想出的。我仍然面临一些空间问题,但它绝对比之前的尝试更可取。

enter image description here

解决方法

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

示例:

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

输出:enter image description here

编辑和另一个例子:

正如 Joel 在评论中提到的,树状图也可能有所帮助 - 可能会更好,因为它减少了绘图上的空白。使用上面的数据,这将如下所示(继续上面的包和数据):

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

输出: enter image description here

当我总结数据时,我将每个计数的所有变量标签连接起来。在图中,我使用 str_wrap() 包中的 stringr 函数来自动插入适当的换行符。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。