绘图技巧

绘图技巧

今天小编继续给大家送上优秀可视化教程推文,同时,我们也提供练习数据哦~本期的重点是是关于桑葚图(Sankey Diagram),中文名字叫法不同,我们还是以英文名称为主哈,本期内容主要包括以下几点:

桑葚图(Sankeydiagram)简介R-ggalluvial绘制实例其他工具绘制桑葚图(Sankey Diagram)简介「桑基图(Sankey Diagram)」,即桑基能量分流图,也叫桑基能量平衡图。它是一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,通常应用于能源、材料成分、金融、零售等数据的可视化分析(来源于网络)。接下来小编就带你如何使用R轻松绘制桑基图。

R-ggalluvial绘制实例得益于ggplot2 强大的绘制功能,在R绘图生态系统中也存在一个包专门用于绘制桑基图-ggalluvial,也是ggplot2的拓展包,大家使用起来也十分方便。针对不同图表绘制,第一步就是转化数据,而 ggalluvial包也为我们贴心的准备数据转换函数 is_alluvia_form()、is_alluvia_form()、to_lodes_form()和to_alluvia_form(),这里小编用的比较多的就是is_alluvia_form()和to_lodes_form()两个函数。接下来我们具体使用具体数据操作。(更多详细内容,可以查看ggalluvial官网:http://corybrunson.github.io/ggalluvial/articles/ggalluvial.html)

”宽数据“作图数据检测ggalluvial可为两种数据绘制桑基图,其中一种就是宽数据,这里使用官网提供的例子来看一下宽数据绘图过程:

代码语言:javascript代码运行次数:0运行复制library(ggalluvial)

library(tidyverse)

library(ggtext)

library(hrbrthemes)

library(wesanderson)

library(LaCroixColoR)

#导入数据

head(as.data.frame(UCBAdmissions), n = 12)

## Admit Gender Dept Freq

## 1 Admitted Male A 512

## 2 Rejected Male A 313

## 3 Admitted Female A 89

## 4 Rejected Female A 19

## 5 Admitted Male B 353

## 6 Rejected Male B 207

## 7 Admitted Female B 17

## 8 Rejected Female B 8

## 9 Admitted Male C 120

## 10 Rejected Male C 205

## 11 Admitted Female C 202

## 12 Rejected Female C 391

可以看到,这就是宽数据了,通常在使用ggplot2绘图,我们都需要将其转换成长数据绘图,但这里,我们则可以使用如下代码检测即可:

代码语言:javascript代码运行次数:0运行复制is_alluvia_form(as.data.frame(UCBAdmissions), axes = 1:3, silent = TRUE)

## [1] TRUE

可视化绘制代码语言:javascript代码运行次数:0运行复制ggplot(as.data.frame(UCBAdmissions),

aes(y = Freq, axis1 = Gender, axis2 = Dept)) +

geom_alluvium(aes(fill = Admit), width = 1/12) +

geom_stratum(width = 1/12, fill = "black", color = "grey") +

geom_label(stat = "stratum", aes(label = after_stat(stratum))) +

scale_x_discrete(limits = c("Gender", "Dept"), expand = c(.05, .05)) +

scale_fill_brewer(type = "qual", palette = "Set1") +

hrbrthemes::theme_ipsum(base_family = "Roboto Condensed") +

ggtitle("UC Berkeley admissions and rejections, by sex and department")

geom_alluvium example

”长数据“作图宽数据绘制虽然比较容易理解,但对其定制化修改则有些麻烦,这时候我们可以使用 长数据 进行绘制。

代码语言:javascript代码运行次数:0运行复制data(majors)

head(majors,8)

long data

接下来的绘图则与通常的ggplot2绘制相似,如下:

代码语言:javascript代码运行次数:0运行复制data(majors)

majors$curriculum <- as.factor(majors$curriculum)

ggplot(majors,

aes(x = semester, stratum = curriculum, alluvium = student,

fill = curriculum, label = curriculum)) +

#scale_fill_brewer(type = "qual", palette = "Set2") +

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

ggalluvial::geom_flow(stat = "alluvium", lode.guidance = "frontback",

color = "black") +

geom_stratum() +

hrbrthemes::theme_ipsum(base_family = "Roboto Condensed")

long data charts example

实例数据演示介绍完长短数据绘图之后,我们使用具体的数据进行练习,获取数据及处理代码如下:

代码语言:javascript代码运行次数:0运行复制# 读取Excel数据包

library(readxl)

df2<-read_excel("ggalluvial_test_data.xlsx")

#检查是否符合绘制需求

is_alluvia_form(df2, tidyselect::starts_with("d"))

## TRUE

# 转换成长数据进行绘图

df2_pro <- to_lodes_form(df2,axes = 4:14,key = "x", value = "stratum",id = "alluvium")

# 由于会出现NA值,我们需将NA去除

df2_pro_nona <- df2_pro %>% filter(!(stratum %in% NA))

# 开始可视化绘制

flow02 <- ggplot(df2_pro_nona,

aes(x = x, stratum = stratum, alluvium = alluvium,

fill = stratum, label = stratum)) +

#scale_fill_brewer(type = "qual", palette = "Set2") +

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

ggalluvial::geom_flow(color = "black") +

geom_stratum(width = .4) +

labs(x="",y="",

title = "Example of ggalluvial charts makes",

subtitle = "processed charts with geom_flow()",

caption = "Visualization by DataCharm") +

hrbrthemes::theme_ipsum(base_family = "Roboto Condensed") +

#添加文本信息

geom_text(stat = "stratum",size=3,color="black",fontface = "plain") +

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=20),

plot.caption = element_markdown(face = 'bold',size = 15),

# 去除刻度线和网格线和图形背景颜色

axis.text.x = element_blank(),

axis.text.y = element_blank(),

panel.grid.major = element_blank(),

panel.grid.minor = element_blank(),

panel.background = element_rect(fill="#FFFFF3"),

panel.border = element_rect(fill = NA,colour = "#FFFFF3"),

plot.background = element_rect(fill="#FFFFF3",colour = "#FFFFF3"),

# 定制化图例操作

legend.direction = "vertical",

legend.position = c(.95,.7),

legend.key.width = unit(1.1, "lines"),

legend.key.height = unit(1.1, "lines"),

legend.spacing.x = unit(0.2, 'cm'),

legend.background = element_rect(fill = NA,colour=NA),

legend.title = element_text(size = 13, face = "bold"),

legend.text = element_text(size = 11)

)

实例演示

这里小伙伴们可能看到,我是一步一步进行展示的(数据分析习惯了,刚开始学习的同学也可以这样操作了),有基础的同学可以使用管道(%>%) 功能。

其他工具绘制在选择使用ggalluvial包进行绘制之前,我也查阅了其他绘图工具,如R-easyalluvial和R-networkD3等包,下面我给出其官网的部分可视化结果供大家参考。

R-easyalluvial代码语言:javascript代码运行次数:0运行复制suppressPackageStartupMessages( require(parcats) )

p = alluvial_wide(mtcars2, max_variables = 5)

parcats(p, marginal_histograms = TRUE, data_input = mtcars2)

R-easyalluvial example 可交互

R-networkD3代码语言:javascript代码运行次数:0运行复制URL <- paste0(

"https://cdn.rawgit.com/christophergandrud/networkD3/",

"master/JSONdata/energy.json")

Energy <- jsonlite::fromJSON(URL)

# Plot

sankeyNetwork(Links = Energy$links, Nodes = Energy$nodes, Source = "source",

Target = "target", Value = "value", NodeID = "name",

units = "TWh", fontSize = 12, nodeWidth = 30)

R-networkD3 example 可交互

可以看出,以上两个偏网页交互式集成居多哈~

总结以上就是本期的可视化教程推文了,感兴趣的小伙伴可以获取源数据进行练习哦~~

参考链接:http://corybrunson.github.io/ggalluvial/articles/ggalluvial.html

https://erblast.github.io/easyalluvial/

http://christophergandrud.github.io/networkD3/

相关文章

【世界杯观察】超长补时生悬念 5换规则造奇迹
365bet体育在线下载

【世界杯观察】超长补时生悬念 5换规则造奇迹

📅 07-21 👁️ 4477
qq签到运势都有什么(每日一签奖励详解)
365bet怎么提款

qq签到运势都有什么(每日一签奖励详解)

📅 07-12 👁️ 890
阿拉伯数字 0、1、2、3、4、5、6、7、8、9 书写规范
365bet怎么提款

阿拉伯数字 0、1、2、3、4、5、6、7、8、9 书写规范

📅 07-11 👁️ 6855
塞尔达传说四神兽位置
365bet体育在线下载

塞尔达传说四神兽位置

📅 07-18 👁️ 3688
哪个充气泵牌子好?十大口碑最好充气泵
365bet体育在线下载

哪个充气泵牌子好?十大口碑最好充气泵

📅 07-20 👁️ 1143
再见,梅西!
365bet官网平台网址

再见,梅西!

📅 07-10 👁️ 6817