欢迎关注R语言数据分析指南
❝最近有读者询问旭日图如何绘制,本节分享一个绘制旭日图的案例,该案例为geomtextpath包官网介绍文档内包含。geomtextpath包主要用于添加各类曲线文本等功非常的强大。本次通过该案例来解释一下旭日图的绘制过程,希望对读者有所启发,详细内容请参考geomtextpath包官方文档。
geomtextpath官方文档
❝https://github.com/AllanCameron/geomtextpath
结果图
❝旭日图类似与饼图,但是二者在内容展示上还是有着区别,旭日图两层之间是存在联系的,若数据有多个层级可添加更多层。左侧为直角坐标系版,右侧则为论文中常用的极坐标版,因此只要绘制出直角坐标系后直接使用coord_polar()函数该图即可完成。
绘制难点
❝旭日图的绘制难点大概在于数据格式的构建,若分组较少则可以手动进行数据构建。若想进一下解放双手那就需要深入理解数据,最终通过代码来实现。geomtextpath包给的参考案例过于高度自定义化,不具有一定的通用性,但是此案例对于理解旭日图的绘制过程则很有用,下面来解析一番。
加载R包
install.packages("geomtextpath")
library(geomtextpath)
library(tidyverse)
构建数据
df <- data.frame(x1 = c(seq(0, 10/6 * pi, pi/3),
seq(0, 10/6 * pi, 2*pi/3)),
y1 = c(rep(2, 6), rep(-1, 3)),
x2 = c(seq(0, 10/6 * pi, pi/3) + pi/3,
seq(0, 10/6 * pi, 2*pi/3) + 2*pi/3),
y2 = c(rep(4, 6), rep(2, 3)),
group = letters[c(1:6, (1:3) * 2)],
alpha = c(rep(1, 6), rep(0.4, 3)))
x1 y1 x2 y2 group alpha
1 0.000000 2 1.047198 4 a 1.0
2 1.047198 2 2.094395 4 b 1.0
3 2.094395 2 3.141593 4 c 1.0
4 3.141593 2 4.188790 4 d 1.0
5 4.188790 2 5.235988 4 e 1.0
6 5.235988 2 6.283185 4 f 1.0
7 0.000000 -1 2.094395 2 b 0.4
8 2.094395 -1 4.188790 2 d 0.4
9 4.188790 -1 6.283185 2 f 0.4
df %>% ggplot(aes(x1, y1)) +
geom_rect(aes(xmin = x1, xmax = x2, ymin = y1, ymax = y2, fill = group,
alpha = alpha),
color = "white", linewidth = 2)
❝结合df数据及上图则可以看到X轴(0~2.09)为一组,(2.09~4.18)为一组,对应Y轴为(-1~2);而第二层的数据Y轴则为(2~4),X轴则与第一层一致每一分组的位置信息在前一组的基础上累加而成。最终通过geom_rect()将其绘制成方块。这一思路为绘制旭日图的关键,由此想法则可以联系到R中的cumsum()函数,该函数正好可以实现此类需求,读者可以基于此思路尝试一番操作。
plot <- df %>% ggplot(aes(x1, y1)) +
geom_rect(aes(xmin = x1, xmax = x2, ymin = y1, ymax = y2, fill = group,
alpha = alpha),
color = "white", linewidth = 2) +
geom_textpath(data = data.frame(x1 = seq(0, 2 * pi, length = 300),
y1 = rep(0.5, 300),
label = rep(c("stats", "effects", "polar"), each = 100)),
aes(label = label), linetype = 0, size = 8,
upright = TRUE) +
geom_textpath(data = data.frame(x1 = seq(0, 2 * pi, length = 300),
y1 = rep(3, 300),
label = rep(c("density", "smooth", "unique", "organic",
"easy to use", "automatic"),
each = 50)),
aes(label = label), linetype = 0, size = 4.6, color = "white",
upright = TRUE) +
scale_y_continuous(limits = c(-5, 4)) +
scale_x_continuous(limits = c(0, 2*pi)) +
scale_fill_manual(values = c("deepskyblue3", "deepskyblue4",
"green3", "green4","tomato", "tomato2")) +
scale_alpha_identity() +
theme_void() +
theme(legend.position = "none")
plot + coord_polar() # 极坐标化
关注下方公众号下回更新不迷路
❝本节介绍到此结束,有需要学习R数据可视化的朋友欢迎到淘宝店铺:R语言数据分析指南,购买小编的R语言可视化文档(2024版),购买将赠送2023年的绘图文档内容。目前此文档(2023+2024)已经更新上传200案例文档,每个案例都附有相应的数据和代码,并配有对应的注释文档,方便大家学习和参考。
2024更新的绘图内容将同时包含数据+代码+注释文档+文档清单,2023无目录仅有数据文件夹,小编只分享案例文档,不额外回答问题,无答疑服务,零基础不推荐买。
案例特点
❝所选案例图均属于个性化分析图表完全适用于论文发表,内容异常丰富两年累计发布案例图200+,2024年6月起提供html版注释文档更加直观易学。文档累计上千人次购买拥有良好的社群交流体验。R代码结构清晰易懂,为防止中文乱码提供单独的注释文档
R代码结构清晰易懂,为防止中文乱码2024年6月起提供单独html注释文档