8.3.3 条形图相关操作
1、条形宽度和间距调整 geom_bar()函数中width调整条形宽度,默认值为0.9,取值范围0-1;簇状条形图默认组内条形间距为0,要调整组内条形间距可将width设定小一些,并令position_dodge()的取值大于width。
data1 %>%
ggplot(aes(x = nitrogen, y = v1)) + geom_bar(stat = "identity") # 默认的是0.9。
data1 %>%
ggplot(aes(x = nitrogen, y = v1)) + geom_bar(stat = "identity", width = 0.5) # width调整为0.5。
data1 %>%
ggplot(aes(x = nitrogen, y = v1, fill = nitrogen)) + geom_bar(stat = "identity", width = 1) # width取值最大只能是1。
data1 %>%
ggplot(aes(x = nitrogen, y = v1, fill = variety)) + geom_bar(stat = "identity", position = "dodge") # 分组柱状图,position=position_dodge()默认参数是0.9。
data1 %>%
ggplot(aes(x = nitrogen, y = v1, fill = variety)) + geom_bar(stat = "identity", width = 0.5, position = position_dodge(0.7)) # 同时设定width和position_dodge()调整组内间距。
2、x轴分组顺序调整
对于 X轴变量为类别型的数据,使用ggplot2包绘图时,会默认将X轴类别按照字母顺序绘制柱形。一般推荐对数据进行降序处理后,再展示图表,这样,更加方便观察数据规律,确定某个类别对应的数值在整个数据范围的位置。scale_x_discrete()函数中的limits参数可调整分类变量顺序。
data1 %>%
ggplot(aes(x = nitrogen, y = v1)) + geom_bar(stat = "identity") # 基础图。
data1 %>%
ggplot(aes(x = nitrogen, y = v1)) +
geom_bar(stat = "identity") + scale_x_discrete(limits = c("N2", "N4", "N1", "N3")) # 调整分组顺序。
data1 %>%
ggplot(aes(x = nitrogen, y = v1)) +
geom_bar(stat = "identity") + scale_x_discrete(limits = rev(levels(factor(data1$nitrogen)))) # 反转因子顺序。
3、数据标签添加geom_text()函数可映射要添加的数据标签。
data1 %>%
ggplot(aes(x = nitrogen, y = v1)) +
geom_bar(stat = "identity") + geom_text(aes(label = v1)) # 添加数据标签。
为什么会出现重叠,因为我的数据没有进行统计。不是用均值进行绘图的。
data1 %>%
group_by(nitrogen) %>%
summarise(mean_v1 = mean(v1), sd_v1 = sd(v1)) %>%
ggplot(aes(x = nitrogen, y = mean_v1)) +
geom_bar(stat = "identity") + geom_text(aes(label = round(mean_v1, 2)), vjust = -0.5) # 添加数据标签。
4、x和y轴互换 coord_flip()函数用于反转坐标轴。
data1 %>%
ggplot(aes(x = nitrogen, y = v1)) + geom_bar(stat = "identity") # 基础图。
data1 %>%
ggplot(aes(x = nitrogen, y = v1)) +
geom_bar(stat = "identity") + coord_flip() # 翻转坐标轴。
data1 %>%
ggplot(aes(x = nitrogen, y = v1)) +
geom_bar(stat = "identity") +
coord_flip() + scale_x_discrete(limits = rev(levels(factor(data1$nitrogen)))) # 翻转坐标轴并翻转因子顺序。
5、刻度位置调整
标度函数scale_y_continuous()中的breaks用于调整刻度线位置。ggplot柱形图纵坐标起始不是从0开始的,即x轴与图柱之间有间隙,可在 scale_y_continuous()中调整expand参数。 要调整y轴范围,可通过ylim()实现,也可以在scale_y_continuous()中设定limits参数。
data1 %>%
ggplot(aes(x = nitrogen, y = v1)) + geom_bar(stat = "identity") # 基础图。y轴刻度0到15,间隔单位5。
data1 %>%
ggplot(aes(x = nitrogen, y = v1)) +
geom_bar(stat = "identity") + scale_y_continuous(breaks = c(0, 5, 8, 10, 12, 15, 18)) # 调整为自定义刻度。
data1 %>%
ggplot(aes(x = nitrogen, y = v1)) +
geom_bar(stat = "identity") + scale_y_continuous(expand = c(0, 0)) # 调整y轴从0开始,去除与x轴的间隙。
data1 %>%
ggplot(aes(x = nitrogen, y = v1)) +
geom_bar(stat = "identity") + scale_y_continuous(expand = c(0, 0), limits = c(0, 1.8)) # 开始,去除与x轴的间隙。
## Warning: Removed 44 rows containing missing values (`geom_bar()`).
data1 %>%
ggplot(aes(x = nitrogen, y = v1)) +
geom_bar(stat = "identity") + ylim(0, 2) # 设置y阈值为0-2。
## Warning: Removed 44 rows containing missing values (`geom_bar()`).
6、添加误差线geom_errorbar()函数将变量映射到ymin和ymax的值即可。
data1 %>%
group_by(nitrogen) %>%
summarise(mean_v1 = mean(v1), sd_v1 = sd(v1)) %>%
ggplot(aes(x = nitrogen, y = mean_v1)) +
geom_bar(stat = "identity") + geom_errorbar(aes(ymin = mean_v1 - sd_v1, ymax = mean_v1 + sd_v1), width = 0.2)
7、添加显著性结果 假设我已经对数据data1进行了单因素方差分析,经分析四个氮水平的差异显著性用字母标注是c,ab,b,a。
data1 %>%
group_by(nitrogen) %>%
summarise(mean_v1 = mean(v1), sd_v1 = sd(v1)) %>%
ggplot(aes(x = nitrogen, y = mean_v1)) +
geom_bar(stat = "identity") +
geom_errorbar(aes(ymin = mean_v1 - sd_v1, ymax = mean_v1 + sd_v1), width = 0.2) + geom_text(aes(x = nitrogen, y = mean_v1 + sd_v1 + 0.2, label = c("c", "ab", "b", "a")), size = 3, fontface = "bold")
ggpubr包添加显著性标识
library(ggpubr) # 调用ggpubr包。compare_means(v1 ~ nitrogen, data = data1, method = "t.test") # 先根据分组进行t检验。
## # A tibble: 6 × 8
## .y. group1 group2 p p.adj p.format p.signif method
## <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 v1 N1 N2 0.000225 0.0011 0.00023 *** T-test
## 2 v1 N1 N3 0.00130 0.0052 0.00130 ** T-test
## 3 v1 N1 N4 0.00000118 0.0000071 1.2e-06 **** T-test
## 4 v1 N2 N3 0.652 0.65 0.65232 ns T-test
## 5 v1 N2 N4 0.0717 0.14 0.07171 ns T-test## 6 v1 N3 N4 0.0354 0.11 0.03545 * T-test
data1 %>%
ggplot(aes(x = nitrogen, y = v1)) +
geom_bar(stat = "identity") +
stat_compare_means(comparisons = list(c("N1", "N2"),
c("N2", "N3"),
c("N3", "N4")),
method = "t.test",
label = "p.format", label.y = c(15, 17, 19)) # 根据检验结果添加显著性结果。
## [1] FALSE
参考资料
ggplot2: 数据分析与图形艺术,西安交通大学出版社,2013.
R语言数据可视化之美:专业图表绘制指南,电子工业出版社,2019.
R数据科学,人民邮电出版社,2018.
R数据可视化手册,人民邮电出版社,2014.
- END -
本文使用 文章同步助手 同步