❝本节来回答一个老爷的问题,介绍常见绘图案例中几个基本参数的设置问题,主要用在柱状图与箱线图中。下面小编通过两个案例来进行展示,图形仅供展示用过程仅参考,希望各位观众老爷能够喜欢。代码直接复制粘贴即可运行 ❞
library(tidyverse)
library(patchwork)
df <- iris %>% pivot_longer(-Species) %>%
group_by(Species) %>%
slice_head(n=2) %>%
ungroup() %>%
slice(-4,-6)
p1 <- ggplot(df) +
geom_col(aes(x =Species,y=value,fill=name),
position = "dodge")+
labs(x=NULL,y=NULL)+
theme(legend.position ="non")
p2 <- ggplot(mtcars, aes(factor(cyl), fill = factor(vs))) +
geom_bar(position = position_dodge(preserve = "single"))+
labs(x=NULL,y=NULL)+
theme(legend.position ="non")
p3 <- ggplot(df) +
geom_col(aes(x =Species,y=value,fill=name),
position = position_dodge2(preserve = "single"))+
labs(x=NULL,y=NULL)+
theme(legend.position ="non")
p1+p2+p3
❝在上方代码中可以看到
position_dodge()
,position = "dodge"
和position_dodge2()
这三个参数,该系统参数都用于调整图层元素(如柱子或点)的位置,以避免重叠。但它们之间有一些细微的差别: ❞
position = "dodge"
这是position_dodge()
的简写形式,它会自动计算需要的dodge宽度。不能设置preserve
参数。
position_dodge()
相对于position="dodge"
更为灵活,允许通过width
参数来设置dodge的宽度。
默认情况下,preserve="total"
,意味着所有的柱子会被等宽地分开。
position_dodge2()
这是position_dodge()
的一个扩展,提供了更多的控制,preserve= "single"
:保持每个单独的柱子的宽度不变,而不是整个组。
preserve="total"
:保持整个组的宽度不变(这与position_dodge()
相同)。
position_dodge2(width = 0.9, preserve = "single")
假设你有一个数据集,其中有两个因素变量A
和B
,每个都有两个水平1
和2
。
position="dodge"
或position_dodge()
,你会得到四个等宽的柱子(两个A=1
和两个A=2
),它们按B
的水平分开。position_dodge2(preserve="single")
,如果A=1
和A=2
的柱子高度不同,那么A=1
的两个柱子会比A=2
的两个柱子更接近,因为它们的宽度被保留了。set.seed(1234)
data <- data.frame(values = rnorm(100),
group = LETTERS[1:4])
ggplot(data, aes(x = group, y = values)) +
stat_boxplot(geom="errorbar",width=0.1)+ # 绘制箱线图的error bar
geom_boxplot() + # 绘制箱线图
stat_summary(fun = mean, geom = "point", col = "#00A08A") + # 绘制均值点
stat_summary(fun = mean, geom = "text", col = "#00A08A", # 绘制均值标签
vjust = 1.5, aes(label = paste("Mean", round(..y.., digits = 1))))+
theme_bw() # 使用黑白主题