使用 plotly 绘制旭日图

简介: 使用 plotly 绘制旭日图

简介

最近需要绘制一个图来说明不同类别之间的层次结构。于是想到了旭日图(多层饼图)。类似于以下图形:

来源于:《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

目录
相关文章
|
2月前
|
存储
QT图形视图框架绘制曲线图和Smith图
QT图形视图框架绘制曲线图和Smith图
20 0
|
3月前
【SPSS】基础图形的绘制(条形图、折线图、饼图、箱图)详细操作过程(下)
【SPSS】基础图形的绘制(条形图、折线图、饼图、箱图)详细操作过程
114 0
|
3月前
【SPSS】基础图形的绘制(条形图、折线图、饼图、箱图)详细操作过程(上)
【SPSS】基础图形的绘制(条形图、折线图、饼图、箱图)详细操作过程
75 0
|
8月前
|
编解码 前端开发 JavaScript
Matplotlib使用和绘制二维图表
Matplotlib使用和绘制二维图表
63 0
|
9月前
|
Go
如何用ggplot2绘制基因功能富集气泡图?
如何用ggplot2绘制基因功能富集气泡图?
|
11月前
|
数据挖掘
ggplot2| 绘制KEGG气泡图
ggplot2| 绘制KEGG气泡图
202 0
|
12月前
|
数据可视化 数据处理
R绘图案例|基于分面的折线图绘制
R绘图案例|基于分面的折线图绘制
178 0
|
12月前
|
机器学习/深度学习 算法 数据可视化
R绘图案例|基于分面的面积图绘制
R绘图案例|基于分面的面积图绘制
10830 0
|
数据可视化 前端开发 UED
matplotlib图形整合之多个子图一起绘制
matplotlib图形整合之多个子图一起绘制
582 0
matplotlib图形整合之多个子图一起绘制
|
数据可视化 Python
可视化库Matplotlib-柱形图与盒图
可视化库Matplotlib-柱形图与盒图
可视化库Matplotlib-柱形图与盒图