矩形树状图怎么绘制?!一行代码搞定,超简单~~

文摘   2024-10-15 11:35   江苏  

前言

我们的可视化课程上线啦!目前课程的主要方向是 科研、统计、地理相关的学术性图形绘制方法,后续也会增加商务插图、机器学等、数据分析等方面的课程。

我们的可视化学习社群上线啦!可视化学习社区以我的书籍《科研论文配图绘制指南-基于Python/R语言》为基础进行拓展,提供课堂式教学视频,还有更多拓展内容,可视化技巧远超书籍本身,书籍修正和新增都会分享到圈子里面~~

参与课程或者圈子的你将获取到:学员答疑、可视化资源分享、可视化技巧补充、可视化业务代做(学员和甲方对接)、副业交流、提升认知等等。

今天这篇推文的主角就是-树形矩阵图(Treemap)。绘制树形图使用R或者Python都是可以绘制的,今天我们还是使用R进行绘制(Python绘制结果为交互式,后面统一介绍相应的库)。在R中有专门的包-treemapify包进行绘制。今天内容主要如下:

  • 树形矩阵图(Treemap)简介
  • 树形矩阵图(Treemap)R实例演示

树形矩阵图(Treemap)简介

在数据可视化分析中,在面对大量分层结构(树状结构) 的数据时,要想准确的使用图表去展示时,树形图(Treemap)就派上用场了。在树形图中,图表被分为若干个大小的矩形,矩形的大小和顺序取决于数据变量,而变量间则使用不同颜色表示。

绘制树形图的所需数据特点如下:

  • 数据呈部分到整体的关系;
  • 数据是分层结构的。

树形矩阵图(Treemap)R实例演示

R-treemapify包可以很好的绘制树形矩阵图(Treemap),其官网为:https://wilkox.org/treemapify/index.html,其主要提供

  • geom_treemap()
  • geom_treemap_text()
  • geom_treemap_subgroup_border()
  • geom_treemap_subgroup_text()

等绘图函数进行树形矩阵图的元素的添加,由于是ggplot2的拓展包,较容易理解,小伙伴们可直接参看官网绘图函数例子即可。下面我们通过一个实例演示R-treemapify包是如何绘制树形矩阵图的。

「官网样例美化」:

ggplot(G20, aes(area = gdp_mil_usd, fill = as.factor(hdi), label = country,
                subgroup = region)) +
  geom_treemap() +
  geom_treemap_subgroup_border() +
  geom_treemap_subgroup_text(place = "centre", grow = T, alpha = 0.5, colour =
                             "black", fontface = "italic", min.size = 0) +
  geom_treemap_text(colour = "white", place = "topleft", reflow = T) +
  scale_fill_manual(values = lacroix_palette("Pamplemousse", n = 19, type = "continuous"),name="")+
    labs(
    title = "Example of <span style='color:#D20F26'>treemapify::geom_treemap function</span>",
    subtitle = "processed charts with <span style='color:#1A73E8'>geom_treemap()</span>",
    caption = "Visualization by <span style='color:#DD6449'>DataCharm</span>") +
    hrbrthemes::theme_ipsum(base_family = "Roboto Condensed") +
    theme(
        plot.title = element_markdown(hjust = 0.5,vjust = .5,color = "black",
                                      size = 25, margin = margin(t = 1, b = 12)),
        plot.subtitle = element_markdown(hjust = 0,vjust = .5,size=18),
        plot.caption = element_markdown(face = 'bold',size = 12),

        panel.background = element_rect(fill="#a3c9c7"),
        panel.border = element_rect(fill = NA,colour = "#a3c9c7"),
        plot.background = element_rect(fill="#a3c9c7",colour = "#a3c9c7"),
        # 修改图例参数
        legend.position = 'none',
        legend.direction = "horizontal",
        legend.spacing.x = unit(.3,"cm"),
        legend.key.height = unit(1, 'lines'),
        legend.key.width = unit(1.4, 'lines'),
        legend.text = element_text(size = 15,margin = margin(r = .5, unit = 'cm'))
  ) +
  guides(fill=guide_legend(nrow=3,byrow=TRUE,reverse = TRUE,title=NULL))

可视化结果如下:

Example01 of treemapify

「实例演示」

library(tidyverse)
library(ggtext)
library(hrbrthemes)
library(LaCroixColoR)
library(treemapify)

proglangs <- readr::read_csv("proglanguages.csv")
ggplot(proglangs, aes(area=value, fill=parent, subgroup=parent)) +
    geom_treemap() +
    geom_treemap_subgroup_border(color="gray40") +
    geom_treemap_text(aes(label=id),fontface = "italic", colour = "black", place = "centre",
                      grow = TRUE) +
     geom_treemap_subgroup_text(color="white",fontface="bold.italic",place = "centre",
                                min.size = 0,alpha=.7,grow = TRUE)+

    scale_fill_manual(values = lacroix_palette(type = "paired"),name="")+

    labs(
    title = "Example of <span style='color:#D20F26'>treemapify::geom_treemap function</span>",
    subtitle = "processed charts with <span style='color:#1A73E8'>geom_treemap()</span>",
    caption = "Visualization by <span style='color:#DD6449'>DataCharm</span>") +
    hrbrthemes::theme_ipsum(base_family = "Roboto Condensed") +
    theme(
        plot.title = element_markdown(hjust = 0.5,vjust = .5,color = "black",
                                      size = 25, margin = margin(t = 1, b = 12)),
        plot.subtitle = element_markdown(hjust = 0,vjust = .5,size=18),
        plot.caption = element_markdown(face = 'bold',size = 12),

        panel.background = element_rect(fill="#a3c9c7"),
        panel.border = element_rect(fill = NA,colour = "#a3c9c7"),
        plot.background = element_rect(fill="#a3c9c7",colour = "#a3c9c7"),
        # 修改图例参数
        legend.position = 'bottom',
        legend.direction = "horizontal",
        #legend.spacing.y = unit(.5,"cm"),
        legend.spacing.x = unit(.3,"cm"),
        #legend.key.size = unit(1, 'lines'),
        legend.key.height = unit(1, 'lines'),
        legend.key.width = unit(1.4, 'lines'),
        legend.text = element_text(size = 15,margin = margin(r = .5, unit = 'cm'))
  ) +
  guides(fill=guide_legend(nrow=1,byrow=TRUE,reverse = TRUE,title=NULL))

可视化结果如下:

example of treemapify test

好了,今天的可视化教程比较简单,可以直接使用官网提供的数据进行练习哈~~

总结

今天的推文小编给大家介绍了一个快速绘制「树形矩阵图」的方法,具体的绘图函数也是很好理解的,这里就不再赘述,希望小伙伴们可以多练习哈~~

可视化学习圈子是干什么的?

可视化学习圈子是书籍「科研论文配图绘制指南-基于Python/R语言」一书的学下圈子:主要通过以下几个方面,给大家带来比纸质书籍更丰富的学习内容:

  • 视频教学,和读者零距离互动交流
  • 及时修正勘误和定期新增绘制知识点
  • 拓展衍生,绘图知识点远超书籍本身
  • 直播视频+拓展资料+答疑,学习更高效

「PS」:我们直播教学内容为课堂式教学,原作者带着大家对书籍一章、一节、一页的进行教学。而且直播的视频都会通过剪辑后整理成课程,圈子中的同学可以免费、反复观看。当然,新增内容和定期答疑,直播也是如此。

  • 为何会有这个书籍学习社群?无门槛的微信群难免会鱼龙混杂,问题和质量都无法得到保证,而且一些关键问题经常被淹没,且没有沉淀价值。

  • 随着添加我微信的人日益增多,向我提问的人也越来越多,随便回答一下就太不负责任了;不回答也不是很好;如果都仔细回答,我也有自己的工作并且确实很忙,真的有点心有余而力不足!所以我才会建立这么一个渠道来沉淀我的可视化技巧和分享经验,以及给大家提供一个坚持学习的平台。

系统学习可视化

当然,在学习数据可视化的道路上,你也有很多问题得不到解答,也可以加入我们的可视化课程(可视化系列课程推文)后,在学员群里和大家一起谈论,一起进步,或者直接向我提问。如果我觉得你的问题很具有普适性,我会把它写成文章发布在公众号上,让更多人看到,有关我们数据可视化系列课程的服务内容,可以参考下面的 阅读原文

猜你喜欢

Xarray,不用ArcGIS,所有地理空间绘图全搞定...
Nature都推荐的箱线图(Boxplot)绘制工具长啥样?免费、在线、灵活操作...?
集成Matplotlib、Bokeh、Plotly!这个交互式可视化工具这么强的吗?
完美解决Matplotlib绘图中、英文字体混显问题..
MATLAB绘图不好看?!不是,你是还没发现这几个工具包吧..
不是,这个地理数据工具这么强的吗?数据处理、可视化它都行..
这种环形图太难画?!带你一行代码搞定..
这种图太多人问了,绘制方法真的很简单..
不是,这封面图这么多人问的吗?教程来了
不用Seaborn,这个工具也能绘制超炫的统计图形···
NetworkX,网络结构图最强绘制工具·····
所有科研地理图形它都有,这个工具有点猛····
Nature、Science配图可以一键绘制?!我懵了···
节后第一天,就因为论文配图,被导师怼了一上午·····
plotnine,打死不学R语言, 我可以用Python到40岁.....
TUEplots,一天100张论文配图,导师惊了···



再小的技能,也应该被认真对待。



DataCharm
定期更新与科研学术有关的内容,比如论文插图绘制技巧、实用Python/R拓展包解读、作图软件(Veusz、Qrigin等)教程以及最前沿科研方法等。
 最新文章