如何在ggplot直方图中修改坐标轴线条的粗细?
解决方案:给ggplot直方图加粗X/Y轴线条
问题原因
你尝试用panel.border设置时,**未指定fill=NA**导致矩形填充覆盖了整个绘图区域,且size=5线条过粗,才出现图形消失的问题。
原始代码
library(tidyverse) iris %>% ggplot(aes(x=Sepal.Length))+ geom_histogram(bins=10, fill="white", color="black", size=1)+ labs(x="Sepal Length", y="Count", title = "Sepal Length Histogram")+ theme_classic()+ theme(plot.title = element_text(face="bold"))+ scale_x_continuous(expand = c(0.01,0.01))+ scale_y_continuous(expand = c(0.00,0.01))
正确实现方式
方式1:直接加粗坐标轴线条(适配theme_classic())
theme_classic()默认显示独立的坐标轴线条,直接修改axis.line的参数即可,这是最简洁的方法:
library(tidyverse) iris %>% ggplot(aes(x=Sepal.Length))+ geom_histogram(bins=10, fill="white", color="black", size=1)+ labs(x="Sepal Length", y="Count", title = "Sepal Length Histogram")+ theme_classic()+ theme(plot.title = element_text(face="bold"), # 统一加粗X/Y轴线条,size值可按需调整 axis.line = element_line(color = "black", size = 2))+ scale_x_continuous(expand = c(0.01,0.01))+ scale_y_continuous(expand = c(0.00,0.01))
如果需要单独设置X/Y轴粗细,可拆分参数:
theme(plot.title = element_text(face="bold"), axis.line.x = element_line(color = "black", size = 2), axis.line.y = element_line(color = "black", size = 2))
方式2:使用面板边框(若需要完整边框效果)
如果想要的是完整的面板边框样式,需给panel.border添加fill=NA避免覆盖图形,同时调整合适的线条粗细:
library(tidyverse) iris %>% ggplot(aes(x=Sepal.Length))+ geom_histogram(bins=10, fill="white", color="black", size=1)+ labs(x="Sepal Length", y="Count", title = "Sepal Length Histogram")+ theme_classic()+ theme(plot.title = element_text(face="bold"), panel.border = element_rect(linetype = "solid", colour = "black", size=2, fill=NA))+ # 关键:设置fill=NA防止覆盖图形 scale_x_continuous(expand = c(0.01,0.01))+ scale_y_continuous(expand = c(0.00,0.01))
注:使用面板边框时,可添加axis.line = element_blank()隐藏原有坐标轴线条,避免线条重叠。
内容的提问来源于stack exchange,提问作者Shawn Hemelstrand
相关产品推荐
相关产品推荐

