如何仅用ggplot2复现plotly绘制的R树形图?
仅用ggplot2复现树形图的方案
没问题!虽然ggplot2本身没有内置的树形图(treemap)几何对象,但我们可以借助基于ggplot2的扩展包treemapify来实现——如果你的离线电脑已经安装了这个包的话,这是最贴合ggplot2语法、最便捷的方案。下面是具体步骤:
第一步:处理数据类型
你的dtd7数据框里,n列是因子(factor)类型,而树形图需要用数值来计算区块面积,所以首先要把它转换成数值型:
dtd7$n <- as.numeric(as.character(dtd7$n))
第二步:用ggplot2+treemapify绘制树形图
加载必要的包后,就可以用熟悉的ggplot语法来构建树形图了:
library(ggplot2) library(treemapify) # 绘制静态树形图 p <- ggplot(dtd7, aes(area = n, fill = topic, label = topic)) + # 生成树形图区块 geom_treemap() + # 在区块中心添加标签 geom_treemap_text(colour = "white", place = "centre", size = 10) + # 添加标题 labs(title = "Ingredient Count Treemap") + # 调整图例位置 theme(legend.position = "right") # 查看图形 print(p)
可选:实现类似Plotly的hover交互效果
如果需要像原Plotly图那样的hover提示功能,静态ggplot图做不到,但如果你的电脑安装了ggiraph包,可以把图转成交互式版本:
library(ggiraph) # 创建交互式树形图 p_interactive <- ggplot(dtd7, aes( area = n, fill = topic, label = topic, # 设置hover提示内容 tooltip = paste("Ingredient:", topic, "<br>Count:", n) )) + geom_treemap_interactive() + geom_treemap_text_interactive(colour = "white", place = "centre", size = 10) + labs(title = "Ingredient Count Treemap") + theme(legend.position = "right") # 渲染并查看交互式图形 ggiraph(code = print(p_interactive))
注意事项
- 如果你还没安装
treemapify或ggiraph,因为电脑离线无法联网安装的话,可能需要提前通过其他有网络的电脑下载对应包的离线安装文件,再导入到工作电脑中安装。 - 这个方案的树形图区块面积逻辑和你用Plotly实现的完全一致,都是基于
n列的数值大小分配空间。
内容的提问来源于stack exchange,提问作者user14644617
相关产品推荐
相关产品推荐

