查看原文
其他

使用 plotly 绘制旭日图

庄闪闪 庄闪闪的R语言手册 2023-07-16

点击下方公众号,回复资料分享,收获惊喜

简介

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

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

推荐: 可以保存以下照片,在b站扫该二维码,或者b站搜索【庄闪闪】观看Rmarkdown系列的视频教程。Rmarkdown视频新增两节视频(写轮眼幻灯片制作)需要视频内的文档,可在公众号回复【rmarkdown


R沟通|Rmarkdown教程(4)


R沟通|Rmarkdown教程(3)


R沟通|Rmarkdown教程(2)


R沟通|Rmarkdown教程(1)


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存