R语言 在{ggplot 2}中混合箱图和小提琴图时保留箱图须

dced5bon  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(82)

Preamble

假设我有一个功能,允许用户创建一个boxviolin图,其中框和小提琴图重叠。

library(ggplot2)

df <- dplyr::filter(mpg, class %in% c("compact", "midsize"))

p1 <- ggplot(df, aes(class, hwy)) + geom_violin() + geom_boxplot() 

p1

字符串
x1c 0d1x的数据
我还想允许用户删除小提琴情节,如果他们想和我支持的方式是要求用户设置小提琴情节的宽度为0

p2 <- ggplot(df, aes(class, hwy)) + geom_violin(width = 0) + geom_boxplot() 

p2



创建于2023-12-10使用reprex v2.0.2

问题

如果你仔细注意,两个图之间的箱线图胡须已经改变了。我认为这是因为小提琴图通过插值数据增加了数据的范围,这使得离群点不再是离群点。
如何避免这种情况?也就是说,如何允许用户在不影响箱线图须的情况下使小提琴图消失?
注意:我知道我可以只提供一个像plot.type这样的参数,然后根据它的参数添加小提琴层。但这不是我更喜欢的API,因为其他原因。

cld4siwp

cld4siwp1#

改变的不是盒形图须。当你设置width=0时,小提琴会折叠成一条扁平的线。为了避免这种情况或完全删除它,也设置linewidth=0

library(ggplot2)

df <- dplyr::filter(mpg, class %in% c("compact", "midsize"))

ggplot(df, aes(class, hwy)) +
  geom_violin(width = 0, linewidth = 0) +
  geom_boxplot()

字符串


的数据

z4iuyo4d

z4iuyo4d2#

您可以使用颜色和填充参数作为NA,而不是使任何图不可见。

df <- dplyr::filter(mpg, class %in% c("compact", "midsize"))
  
  p1 <- ggplot(df, aes(class, hwy)) + geom_violin() + geom_boxplot() 
  
  p1
  
  p2 <- ggplot(df, aes(class, hwy)) + geom_violin(color=NA,fill=NA) + geom_boxplot() 
  
  p2

字符串


的数据

相关问题