首页 > 解决方案 > 在 Alluvial 中进行的类似可视化

问题描述

我遇到了这种可视化,我正在尝试制作一个类似的可视化。

这是图片!

美国警察开枪

它看起来像一个 sankey(当然没有流程),所以我尝试用类似的结果做一个 sankey,但我最终没有类似的结果。我也试过用 Alluvial 来做,但我最终得到了一个不同的图表。谁能解释一下什么是特定的可视化,称为如何做到这一点。

我尝试使用 Alluvial 进行此操作,但最终得到了不同的图表。

这是我用冲积得到的。数据与上面显示的示例不同。

数据:

df <- data.frame(Caste = c("SC","ST","OBC","FC"),
                 Total_population = c(0.17, 0.09, 0.52, 0.22),
                 Convicts = c(0.209, 0.137, 0.312, 0.341))

冲积代码:

ggplot(df,aes(y = Freq, axis1 = Details, axis2 = Caste)) +
  geom_alluvium(fill = cols ,width = 1/12) +
  geom_stratum(width = 1/12, fill = mycols, color = "grey") +
  geom_label(stat = "stratum", infer.label = TRUE) +
  scale_x_discrete(limits = c("Details", "Caste"), expand =c(.05,.05))+
  scale_fill_brewer(type = "qual", palette = "Set1") +
  ggtitle("Convict rate with total population")

这是我所取得的冲积

这是我所取得的冲积.

这不是我想要达到的。

我需要知道的事情,

  1. 如何制作这个可视化的精确版本。
  2. 如何仅使用我拥有的数据的结果而不是整个数据表来做到这一点。

谢谢

标签: rggplot2data-visualizationsankey-diagram

解决方案


这只是为了好玩 - 我已经接受了彼得的答案(他应该得到充分的信任并且应该被授予接受的答案)并进行了一些修改以使其更像问题中的示例:

在此处输入图像描述

代码

library(ggalluvial)
library(forcats)
library(tidyr)
library(scales)

dfl < pivot_longer(df, -Caste)

ggplot(data = dfl, aes(y = value, x = fct_rev(name), 
                       stratum = Caste, alluvium = Caste, fill = Caste)) +
  geom_flow(colour = "black", size = 3, linetype = 1, alpha = 1)+
  geom_flow(fill = "black", size = 3, linetype = 1, alpha = 0.5)+
  geom_stratum(colour = "black", size = 3)+
  geom_text(stat = "stratum", infer.label = TRUE, size = 5, 
            nudge_x = -0.2, aes(alpha = fct_rev(name)), color = "white") +
  geom_text(aes(label = percent(value)), stat = "stratum", size = 5, color = "white") +
  annotate(geom = "text", x = 0.7, y = 0.5, label = "Total population", 
           size = 10, color = "white") +
  annotate(geom = "text", x = 2.3, y = 0.5, label = "Convicts", 
           size = 10, color = "white") +
  coord_flip() +
  scale_alpha_manual(values = c(1, 0)) +
  scale_fill_manual(values = rev(c("#bbbacc", "#9d9caa", "#767583", "#585865", "#40404a"))) +
  labs(title = "Convict rate with total population",
       x = NULL,
       y = NULL)+
  theme_void() +
  theme(legend.position = "none", 
        plot.background = element_rect(fill = "black"),
        axis.ticks = element_blank(),
        axis.text = element_blank(),
        panel.background = element_blank(),
        panel.spacing = margin(0, 0, 0, 0))

推荐阅读