gpt4 book ai didi

r - 根据 R 中的值使用条件颜色绘制数据

转载 作者:行者123 更新时间:2023-12-04 07:23:54 28 4
gpt4 key购买 nike

我正在尝试使用 ggplot2 和以下数据制作条形图(名称与分数):

name <- c("Jon", "Bill", "Maria", "Ben", "Tina")
A <- c(100, -100, -25, 45, 26)
B <- c(23, 100, -100, 48, 52)
C <- c(100, 29, 65, -100, 71)
D <- c(-100, 55, 39, 27, 100)
E <- c(100, -100, 59, 55, 52)
score <- c(27, 35, 42, 51, 66)
df <- data.frame(Name, A, B, C, D, E, score)
该图可以使用 ggplot2 生成
ggplot(df, aes(x = Name, y = score)) + geom_bar(stat = "identity")
但是,我想根据 A-E 列中给出的正负值范围的重复来填充条形颜色。
基本上,我想将条形高度分为两部分:正值的上半部分和负值的下半部分。正值需要进一步分组为自定义范围,如 0-50 和 51-100,因此 0-50 为条形高度的 1/4,51-100 为另一个 1/4(负值也是如此)。
堆栈颜色需要基于相应范围的频率(即给定范围/总样本中具有正值的样本数)。现在假设如果所有值都在 51-100 范围内,颜色应该有更深的脱落(1 或最大频率),而如果没有值下降,即 0,那么颜色脱落应该是浅的。所以最后每个条形都有四部分,每一个都根据正数(0-50 & 51-100)和负数(0- -50 & -51 - -100)频率的重复而着色。
如果有任何困惑,请随时提问。任何帮助,将不胜感激。
先感谢您。

最佳答案

你可以做这样的事情——

library(tidyverse)

Name <- c("Jon", "Bill", "Maria", "Ben", "Tina")
A <- c(100, -100, -25, 45, 26)
B <- c(23, 100, -100, 48, 52)
C <- c(100, 29, 65, -100, 71)
D <- c(-100, 55, 39, 27, 100)
E <- c(100, -100, 59, 55, 52)
score <- c(27, 35, 42, 51, 66)
df <- data.frame(Name, A, B, C, D, E, score)

df %>%
pivot_longer(!c(Name, score)) %>%
mutate(dummy = cut(value, c(-100, -50, 0, 51, 100), include.lowest = T)) %>%
count(Name, score, dummy) %>%
complete(nesting(Name, score), dummy = levels(cut(-100:100, c(-100, -50, 0, 51, 100), include.lowest = T)),
fill = list(n = 0)) %>%
mutate(dummy = factor(dummy, levels = rev(levels(cut(-100:100, c(-100, -50, 0, 51, 100), include.lowest = T))),
ordered = TRUE)) %>%
ggplot(aes(x = Name, y = score/4, fill = dummy, alpha = n, label = n)) +
geom_bar(stat = 'identity') +
geom_text(position = position_stack(vjust = 0.5)) +
guides(alpha = 'none') +
labs(fill = 'Partition',
y = 'Score',
subtitle = 'Values inside bar indicate Frequency') +
geom_text(aes(x = Name, y = score, label = paste(Name, '-', score)), vjust = -0.5)

创建于 2021-08-22 由 reprex package (v2.0.0)

关于r - 根据 R 中的值使用条件颜色绘制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68320196/

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