gpt4 book ai didi

r - 如何在geom_hex图中将图例中的计数显示为百分比

转载 作者:行者123 更新时间:2023-12-04 09:37:19 26 4
gpt4 key购买 nike

在以下情节中:

enter image description here

我想将图例中的计数更改为百分比而不是计数。为了生成绘图,我编写了以下脚本:

  library("RColorBrewer")
df <- read.csv("/home/adam/Desktop/data_norm.csv")
d <- ggplot(df, aes(case1, case2)) + geom_hex(bins = 30) + theme_bw() +
theme(text = element_text(face = "bold", size = 16)) + xlab("Case 2") + ylab("Case 1")
d <- d + scale_fill_gradientn(colors = brewer.pal(3,"Dark2"))

使用 dput生成可重现示例的函数:
structure(list(ID = c(14L, 15L, 38L, 6L, 7L, 1L, 32L, 31L, 
17L, 30L, 19L, 24L, 5L, 5L, 7L, 8L, 35L, 4L, 1L, 6L, 45L, 58L,
59L, 5L, 11L, 29L, 6L, 7L, 22L, 23L, 3L, 4L, 25L, 3L, 20L, 16L,
21L, 109L, 108L, 54L, 111L, 105L, 114L, 28L, 27L, 2L, 24L, 26L,
50L, 49L, 51L, 48L, 56L, 54L, 53L, 55L, 57L, 52L, 25L, 22L, 34L,
23L, 19L, 38L, 39L, 18L, 13L, 27L, 11L), case1 = c(2L, 0L,
0L, 0L, 4L, 17L, 11L, 7L, 9L, 11L, 14L, 5L, 1L, 0L, 0L, 0L, 1L,
0L, 0L, 0L, 0L, 0L, 0L, 26L, 0L, 16L, 0L, 0L, 6L, 4L, 1L, 10L,
3L, 13L, 13L, 12L, 6L, 0L, 0L, 11L, 0L, 0L, 0L, 0L, 3L, 16L,
4L, 3L, 0L, 0L, 0L, 11L, 0L, 0L, 0L, 0L, 0L, 8L, 5L, 7L, 8L,
7L, 4L, 0L, 1L, 15L, 2L, 19L, 2L), case2 = c(30L, 0L, 0L,
0L, 30L, 30L, 29L, 29L, 29L, 29L, 29L, 29L, 30L, 30L, 30L, 30L,
30L, 30L, 30L, 30L, 0L, 29L, 25L, 30L, 30L, 29L, 0L, 0L, 29L,
29L, 30L, 30L, 30L, 30L, 29L, 29L, 29L, 0L, 3L, 29L, 16L, 14L,
0L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 23L, 29L, 30L,
30L, 30L, 30L, 30L, 30L, 30L, 30L, 29L, 0L, 30L, 29L, 30L, 29L,
30L)), class = "data.frame", row.names = c(NA, -69L))

如何在脚本中进行更改,以便以百分比形式显示计数数,而不是显示准确的计数数?

最佳答案

要在不更改基础值的情况下更改比例标签的显示方式,您可以将重新格式化函数传递给 labels=任何 scale_* 的参数功能:

plot <- ggplot(df, aes(case1, case2)) + geom_hex(bins = 30) +
theme_bw() +
theme(text = element_text(face = "bold", size = 16)) +
xlab("Case 2") +
ylab("Case 1")

要将案例数转换为总案例的百分比,我们只需将每个值除以 df 中的案例总数| :
plot + scale_fill_gradientn(colors = brewer.pal(3,"Dark2"),
labels = function(x) x/nrow(df))

enter image description here

How can I change the Y-axis figures into percentages in a barplot?的答案提供多种方法将它们转换为适当的百分比,但最简单的方法是使用 percent来自 scales包(包含在 ggplot2 中):
plot + scale_fill_gradientn(colors = brewer.pal(3,"Dark2"),
labels = function(x) scales::percent(x/nrow(df)))

enter image description here

如果要指定 breaks以便刻度列出特定的舍入百分比,请注意列出的中断将需要引用原始值,而不是转换后的百分比。您可以通过反转您在 labels 中使用的任何转换来做到这一点。 :
plot + scale_fill_gradientn(colors = brewer.pal(3,"Dark2"),
labels = function(x) scales::percent(x/nrow(df)),
breaks = c(.05, .1, .15, .2, .25, .3) * nrow(df))

enter image description here

关于r - 如何在geom_hex图中将图例中的计数显示为百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58939933/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com