如何让geom_bar()柱状图从log10刻度原点(1)开始?
解决方法
问题根源是ggplot默认会给坐标轴添加扩展空白,叠加log10转换和坐标轴翻转后,这个空白就导致柱状图和轴边缘之间出现空隙。只需在scale_y_continuous里添加expand = c(0, 0)参数,就能移除默认空白,让柱状图直接贴合刻度起始值1的位置。
修改后的完整代码:
ggplot(data10, aes(x=Family, y=Total)) + geom_bar(stat = "identity", fill="red") + coord_flip() + theme_bw() + scale_y_continuous( trans="log10", limits=c(1,2000000), labels=scales::comma, expand = c(0, 0) # 关键修改:移除轴扩展空白 ) + theme(text=element_text(size=13)) + theme(axis.title.x = element_text(size=12)) + theme(axis.title.y = element_text(size=12)) + geom_text(aes(label=Total), hjust=-0.1)
补充说明
expand = c(0, 0)的作用是取消坐标轴两端的默认扩展距离,第一个0对应轴的下限,第二个0对应上限,这样柱子就会从你设置的limits下限1开始,直接贴到轴边缘。- 因为你已经通过
limits把y轴范围固定在1到2000000,所以设置expand=c(0,0)不会导致数据被截断。 - 如果翻转后柱状图右侧的文本(
geom_text)位置太靠近边缘,可以适当调整hjust的值(比如改成-0.2)来让文本显示更完整。
内容的提问来源于stack exchange,提问作者Katherine Chau
相关产品推荐
相关产品推荐

