问题描述
我可能遇到了一种罕见的情况,即我具有要使用R
的{{1}}的{{1}} + {{1 }},按组填充和着色小提琴,并按组着色盒子。有时,一个或多个组的值小于三个,例如:
ggplot2
我的geom_violin
代码是:
geom_Boxplot
不希望的行为是将图例分成两部分,我想这是因为C和D组由于点数不足而无法用小提琴表示。
set.seed(1)
df <- data.frame(group = c(rep("A",100),rep("B",rep("C",2),"D"),value = c(rnorm(100,1,1),rnorm(100,2,rnorm(2,3,rnorm(1,1)))
我的问题是,是否可以强迫我的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())