在ggforce/geom_parallel_sets_labels中,如何将个人计数号添加到黑条中?谢谢!(下面的代码使用数据泰坦尼克号,并希望在条形图中显示人的计数号)
library(tidyverse)
library(ggforce)
data <- reshape2::melt(Titanic)
data <- gather_set_data(data, 1:4)
ggplot(data, aes(x, id = id, split = y, value = value)) +
geom_parallel_sets(aes(fill = Sex), alpha = 0.3, axis.width = 0.1) +
geom_parallel_sets_axes(axis.width = 0.1) +
geom_parallel_sets_labels(colour = 'white')发布于 2022-11-02 05:53:48
您可以使用after_stat更改默认标签,并添加value列中的计数,如下所示:
library(tidyverse)
library(ggforce)
data <- reshape2::melt(Titanic)
data <- gather_set_data(data, 1:4)
ggplot(data, aes(x, id = id, split = y, value = value)) +
geom_parallel_sets(aes(fill = Sex), axis.width = 0.3, alpha = 0.3) +
geom_parallel_sets_axes(axis.width = 0.3) +
geom_parallel_sets_labels(aes(label = after_stat(paste(label, value, sep = "\n"))), colour = 'white')

UPDATE当使用after_stat时,您只能访问处理过的数据,即由ggplot2或ggforce处理后的数据,并且只有包含在这些数据中的变量,例如只有映射在美学上的变量才存在于这些数据中。因此,您添加到数据中的value_p列通过after_stat不可用。修复该问题的一个选项是在after_stat中添加该列,我使用自定义助手函数:
helper_after_stat <- function(x, value, label) {
data.frame(x = x, value = value, label = label) %>%
group_by(x) %>%
mutate(value_p = value / sum(value),
label = paste(label, value, scales::percent(value_p), sep = "\n")) %>%
pull(label)
}
ggplot(data, aes(x, id = id, split = y, value = value)) +
geom_parallel_sets(aes(fill = Sex), axis.width = 0.3, alpha = 0.3) +
geom_parallel_sets_axes(axis.width = 0.3) +
geom_parallel_sets_labels(aes(label = after_stat(helper_after_stat(x, value, label))), colour = 'white')

https://stackoverflow.com/questions/74284095
复制相似问题