简介
最近需要绘制一个图来说明不同类别之间的层次结构。于是想到了旭日图(多层饼图)。类似于以下图形:
来源于:《R语言数据可视化之美》
这种图表将数据层次结构呈现为一个圆形区域,其中每个环代表一个层级,而每个扇区表示该层级下的子类别或分支。每个圆环代表层次结构中的一个级别,中心圆点表示根节点,层次结构从这个点往外推移。
注意:旭日图常用于可视化具有多级分类的数据,例如组织架构、文件目录、产品分类等。它能够帮助用户快速理解数据的结构和组成,并从整体和局部两个层面上进行分析和比较。
本教程将使用 plotly[1] 构建旭日图。通过一个简单的案例来说明,读者可以通过替换数据集,即可轻松为己所用。
注意:为小编在科研中学习的笔记,如果觉得有帮助,欢迎一键三连!类似文章如:使用 ggpubr 包制图;使用 ggcharts 高亮部分内容;基于 ggridges 绘制剩余使用寿命密度图;使用 ggTimeSeries 包构建日历图。
教程
本教程主要参考 plotly 官网例子[2],相关教程还可在《R语言数据可视化之美》P253页[3]、Custom interactive sunbursts with ggplot in R[4]、初探R语言可视化交互式包plotly——旭日图[5]中找到。
完整代码和数据可在我的 Github 中找到:https://github.com/liangliangzhuang/R_example。欢迎关注和 star。
# 安装包 install.packages('plotly')
数据介绍
在绘制图形中,最为关键的一步是整理数据。这里以一个简单的数据集作为案例,读者只需要了解表格是如何构成,并根据实际情况进行替换即可。
d <- data.frame( ids = c( "North America", "Europe", "Australia", "North America - Football", "Soccer", "North America - Rugby", "Europe - Football", "Rugby", "Europe - American Football","Australia - Football", "Association", "Australian Rules", "Autstralia - American Football", "Australia - Rugby", "Rugby League", "Rugby Union" ), labels = c( "North<br>America", "Europe", "Australia", "Football", "Soccer", "Rugby", "Football", "Rugby", "American<br>Football", "Football", "Association", "Australian<br>Rules", "American<br>Football", "Rugby", "Rugby<br>League", "Rugby<br>Union" ), parents = c( "", "", "", "North America", "North America", "North America", "Europe", "Europe", "Europe","Australia", "Australia - Football", "Australia - Football", "Australia - Football", "Australia - Football", "Australia - Rugby", "Australia - Rugby" ), stringsAsFactors = FALSE )
此时,数据结构如下所示:
由三列组成,其中 ids 表示名称,labels 表示标签,parents 表示对应的父节点,如果没有父节点,可以用""
表示。
关键点:需要把每个节点之间的关系描述清楚。笨办法:画个手稿,根据手稿一条条写。
或者你可以直接构造一个 .csv 文件,进行导入,类似:
d <- read.csv("d.csv")
绘图
数据构建完毕后,绘图就是一行代码的事情了~
fig <- plot_ly(d, ids = ~ids, labels = ~labels, parents = ~parents, type = 'sunburst') fig
plotly 绘制得到的是 HTML 文件,可以进行交互。读者可以通过点击不同区域进行交互,例如:
当然,plot_ly()
中包含很多参数,包括 maxdepth
显示最大深度结构可视化。color
修改颜色,size
修改尺寸等。此外还可在该图基础上,通过管道函数继续添加内容,设置不同区块的比例等。拓展内容可见官网[6],这里不做具体介绍了(太多啦!)。
保存 PDF 图形
如果你想将该图用到科研论文中(存储为 PDF),还需要进行以下操作:
- 第一种方法:
首先需要在操作系统上安装 orca[7] 库(需要点时间)。之后使用代码:
orca(fig, "fig.pdf")
- 第二种方法:
输出为 Web Page,然后通过打印的形式保存为 PDF,可能还需要使用裁剪 PDF 的工具,例如:avepdf[8]。
参考资料
[1]
plotly: https://plotly.com/graphing-libraries/
[2]
例子: https://plotly.com/r/sunburst-charts/
[3]
《R语言数据可视化之美》P253页: https://github.com/EasyChart/Beautiful-Visualization-with-R
[4]
Custom interactive sunbursts with ggplot in R: https://www.pipinghotdata.com/posts/2021-06-01-custom-interactive-sunbursts-with-ggplot-in-r/
[5]
初探R语言可视化交互式包plotly——旭日图: https://zhuanlan.zhihu.com/p/111884353
[6]
官网: https://plotly.com/r/sunburst-charts/
[7]
orca: https://github.com/plotly/orca#installation
[8]
avepdf: https://avepdf.com/zh/crop-pdf