You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ggplot中axis.text的face='bold'不生效且axis.line仅控制左下轴线

解决ggplot绘制栅格图的两个样式问题

问题描述

  • 设置axis.text的face='bold'后,坐标轴文本并未变为粗体;
  • axis.line仅能控制左侧和底部的轴线,顶部和右侧轴线单独设置仍显示异常。

使用rasterVis的gplot()结合coord_sf()绘图时遇到上述问题,尝试tidyterra包后问题依旧,原代码如下:

library(terra)
library(raster)
library(rasterVis)

f <- system.file("external/test.grd", package="raster")
r <- rast(f)
rr <- project(x=r,y='epsg:4326')
rr
gplot(rr)+
  geom_raster(aes(fill = value),na.rm=T)+
  scale_fill_distiller(na.value = NA)+
  ggtitle(label = 'Test')+
  coord_sf(crs=4326)+
  theme(axis.title = element_blank(),
        axis.line = element_line(colour='black', linewidth = 3, 
                                 linetype=1),
        axis.line.x.top = element_line(colour='black', linewidth = 1, 
                                       linetype=1),
        axis.line.y.right = element_line(colour='black', linewidth = 1, 
                                         linetype=1),
        plot.title = element_text(hjust = 0.5,size = 20,
                                  face = 'bold',family = 'serif'),
        axis.text = element_text(size=20,face='bold',
                                   family = 'serif',color = 'black'),
        legend.title=element_text(face='bold',family = 'serif',
                                  size = 15),
        legend.text = element_text(size = 15,
                                   face='bold',
                              family='serif'),
        panel.background = element_rect(fill=NA,color = 'black')
  )

原因分析

使用coord_sf()后,ggplot会启用针对地理坐标系的特殊主题元素,常规的axis.text、axis.line等参数会被axis.text.sf、axis.line.sf及对应方位的参数覆盖,导致常规设置不生效。

解决方案

修改theme()中的对应参数,替换为sf专属的主题元素:

  1. 坐标轴文本粗体:用axis.text.sf替代axis.text,同时可单独设置上下左右的文本样式;
  2. 四条轴线控制:分别设置axis.line.x.top.sf、axis.line.x.bottom.sf、axis.line.y.left.sf、axis.line.y.right.sf来指定每条轴线的样式。

修改后的代码如下:

library(terra)
library(raster)
library(rasterVis)

f <- system.file("external/test.grd", package="raster")
r <- rast(f)
rr <- project(x=r,y='epsg:4326')

gplot(rr)+
  geom_raster(aes(fill = value), na.rm = TRUE)+
  scale_fill_distiller(na.value = NA)+
  ggtitle(label = 'Test')+
  coord_sf(crs = 4326)+
  theme(
    axis.title = element_blank(),
    # 单独设置四条轴线的样式
    axis.line.x.bottom.sf = element_line(colour='black', linewidth = 3, linetype=1),
    axis.line.x.top.sf = element_line(colour='black', linewidth = 1, linetype=1),
    axis.line.y.left.sf = element_line(colour='black', linewidth = 3, linetype=1),
    axis.line.y.right.sf = element_line(colour='black', linewidth = 1, linetype=1),
    plot.title = element_text(hjust = 0.5, size = 20, face = 'bold', family = 'serif'),
    # 设置sf坐标轴文本为粗体
    axis.text.sf = element_text(size=20, face='bold', family = 'serif', color = 'black'),
    legend.title=element_text(face='bold', family = 'serif', size = 15),
    legend.text = element_text(size = 15, face='bold', family='serif'),
    panel.background = element_rect(fill=NA, color = 'black')
  )

补充说明

如果需要更精细控制某一侧的坐标轴文本,可单独使用axis.text.x.top.sf、axis.text.x.bottom.sf、axis.text.y.left.sf、axis.text.y.right.sf来设置对应方位的文本样式。

内容的提问来源于stack exchange,提问作者jackywang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 15:01:05