我正在嘗試復制此圖,尤其是INDUSTRIAL的螺旋條形圖。知道如何使用 ggplot2 做到這一點嗎?

提前致謝!
uj5u.com熱心網友回復:
使用 geomtextpath 的實際代碼非常簡單。以正確的格式獲取資料是很困難的:
library(geomtextpath)
df <- data.frame(
Domain = rep(c("BUSINESS 12", "CLASSICAL 98", "PROFESSIONAL 152",
"SCIENTIFIC 161", "NORMAL 383", "INDUSTRIAL 2252"),
times = c(2, 2, 2, 2, 2, 202)),
x = c(0, 212, 0, 298, 0, 410, 0, 381, 0, 583, 0,
800 80 * sin(seq(0, pi, length = 100)),
80 - 80 * sin(seq(0, pi, length = 100)), 400),
y = c(8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 3,
2.6 0.4 * cos(seq(0, pi, length = 100)),
1.8 0.4 * cos(seq(0, pi, length = 100)), 1.4)
)
ggplot(df, aes(x, y))
geom_textpath(aes(label = Domain), size = 3,
colour = "#907f6e", hjust = 0, linewidth = 3.8)
theme_void()
theme(plot.background = element_rect(
fill = radialGradient(c("#d8cabe", "#ccb5a1"))),
plot.margin = margin(50, 10, 50, 10))

uj5u.com熱心網友回復:
正如其他人指出的那樣,這是非常具體的(因此與現代資料可視化最佳實踐相悖),Photoshop 可能是完成這項作業的最佳工具。也就是說,這是一個將最長的條切成多塊的版本。不是螺旋形,而是通過讓其在 x 軸上移動來折疊不成比例的大 y 軸值的相同基本思想。
library(tidyverse)
df <- data.frame(
vocation = c('business', 'classical', 'industrial'),
enrollment = c(12, 98, 2252)
)
max.bar.size <- 600
df.cut <- df %>%
group_by(vocation) %>%
summarize(
bar = 1:(floor(enrollment / max.bar.size) 1),
enrollment = c(rep(max.bar.size, floor(enrollment / max.bar.size)), enrollment %% max.bar.size)
) %>%
mutate(bar = as.character(bar))
ggplot(data = df.cut, aes(x = vocation, y = enrollment, group = bar))
geom_col(position = position_dodge2(preserve = 'single'))

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/427635.html
上一篇:R中帶有ggplot2的箱線圖
