gpt4 book ai didi

R geom_violin + geom_boxplot 图例问题

转载 作者:行者123 更新时间:2023-12-03 23:04:09 27 4
gpt4 key购买 nike

我可能遇到了一种罕见的情况,我想使用 R 绘制几个组的值。的 ggplot2geom_violin + geom_boxplot ,按组填充和着色 fiddle ,并按组为盒子着色。有时,一个或多个组的值少于三个,例如:

set.seed(1)

df <- data.frame(group = c(rep("A",100),rep("B",100),rep("C",2),"D"),
value = c(rnorm(100,1,1), rnorm(100,2,1), rnorm(2,3,1), rnorm(1,1,1)))
我的 ggplot2代码是:
library(ggplot2)
ggplot(df,aes(x=group,y=value)) +
geom_violin(aes(fill=group,color=group),alpha=0.3) +
geom_boxplot(width=0.1,aes(color=group),fill=NA) +
theme_minimal() + ylab("Value") + theme(legend.title=element_blank(),axis.ticks.x=element_blank(),axis.text.x=element_blank(),axis.title.x=element_blank())
这个例子在哪里给出:
enter image description here
不受欢迎的行为是图例被分成两部分,我想这是因为 C 和 D 组由于点数不足而无法用 fiddle 表示。
将 C 组和 D 组的点数增加到 3 可以使用相同的代码提供所需的行为:
set.seed(1)

df <- data.frame(group = c(rep("A",100),rep("B",100),rep("C",3),rep("D",3)),
value = c(rnorm(100,1,1), rnorm(100,2,1), rnorm(3,3,1), rnorm(3,1,1)))

df$group <- factor(df$group, levels = c("A","B","C","D"))
enter image description here
我的问题是是否可以强制我的 ggplot2代码总是给出一个图例,就像在第二个例子中一样,即使一个组的点数是一个。
我知道我可以通过为它们添加伪计数来人为地夸大这些组,但在这种情况下,我宁愿忠实于数据。

最佳答案

您可以指定 limits包括所有级别:

library(ggplot2)

ggplot(df, aes(x = group, y = value)) +
geom_violin( aes(color = group, fill = group), alpha = 0.3) +
geom_boxplot(aes(color = group), fill = NA, width = 0.1) +
scale_fill_manual(limits = c("A", "B", "C", "D"),
values = scales::hue_pal()(4),
drop = FALSE) +
ylab("Value") +
theme_minimal() +
theme(legend.title = element_blank(),
axis.ticks.x = element_blank(),
axis.text.x = element_blank(),
axis.title.x = element_blank())
enter image description here

关于R geom_violin + geom_boxplot 图例问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63712014/

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