使用 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

目录
相关文章
|
4月前
|
机器学习/深度学习 弹性计算 人工智能
最新版:云服务器租用价格表(一年/按月/按小时报价明细)
阿里云服务器主要包含轻量应用服务器、云服务器 ECS 和 GPU 服务器三大类,不同类型、配置及计费方式的价格存在差异。以下结合最新信息,整理各类服务器的收费标准、价格构成及不同场景下的参考价格,为用户成本核算提供依据。
|
数据可视化 数据挖掘 数据处理
R语言高级可视化技巧:使用Plotly与Shiny制作互动图表
【8月更文挑战第30天】通过使用`plotly`和`shiny`,我们可以轻松地创建高度互动的数据可视化图表。这不仅增强了图表的表现力,还提高了用户与数据的交互性,使得数据探索变得更加直观和高效。本文仅介绍了基本的使用方法,`plotly`和`shiny`还提供了更多高级功能和自定义选项,等待你去探索和发现。希望这篇文章能帮助你掌握使用`plotly`和`shiny`制作互动图表的技巧,并在你的数据分析和可视化工作中发挥更大的作用。
|
人工智能 安全 大数据
【限时特惠】阿里云服务器7折抢购!高性能+高性价比,开发者与企业必备攻略
阿里云服务器限时7折特惠,高性能、高性价比,为开发者和企业量身打造!新老用户均可参与,灵活配置满足多种需求,全球节点低延迟覆盖。自研神龙架构保障稳定性,安全防护全面,操作便捷,生态丰富。适用于个人开发、企业部署、跨境业务及AI计算等场景。点击专属链接立即抢购,活动名额有限,速来享受云端算力带来的高效体验!
373 0
|
数据可视化
R语言用igraph绘制网络图可视化
R语言用igraph绘制网络图可视化
|
SQL 关系型数据库 数据库
Postgresql基本操作命令
这些是PostgreSQL数据库的一些基本操作命令,用于创建、管理和查询数据库。根据您的需求,可以使用这些命令执行各种数据库操作。
1020 4
ggbiplot | 带箭头的主成分分析(PCA)图绘制
ggbiplot | 带箭头的主成分分析(PCA)图绘制
1054 0
|
数据采集 前端开发 API
Playwright: 比 Puppeteer 更好用的浏览器自动化工具(下)
Playwright: 比 Puppeteer 更好用的浏览器自动化工具
1141 0
|
Web App开发 存储 JSON
http 和www HTTP与HTTPS的区别
http 和www HTTP与HTTPS的区别
http 和www HTTP与HTTPS的区别
|
存储 缓存 JavaScript
Qt+QtWebApp开发笔记(六):http服务器html实现静态相对路径调用第三方js文件
为了解决调用一些依赖的如echarts等一些js的代码模块引入的问题,就需要静态文件了。 本篇解说StaticFileController,在返回的html文本中调用外部js文件,类似的,其他文件都是一样了,只是引入的后缀名不一样。
Qt+QtWebApp开发笔记(六):http服务器html实现静态相对路径调用第三方js文件
|
SQL XML 安全
一个处理字符串的工具类StringEscapeUtils
一个处理字符串的工具类StringEscapeUtils
779 0
一个处理字符串的工具类StringEscapeUtils