R语言 将轴名称绘制在轴中间以外的其他位置

vwkv1x7d  于 2023-02-20  发布在  其他
关注(0)|答案(3)|浏览(173)

我想使用ggplot绘制一个类似于此的图形,其中轴名称(表示为单位)沿着轴显示,而不是在轴的正中间。

我能想到的唯一的R方法是添加一个文本对象,但是如果我想一起显示几个相似的图形,这可能会导致对齐不一致。在图形生成后进行编辑也看起来不优雅,因为相同的编辑软件(比如ppt编辑器)的字体可能看起来与R中的相同字体不一样。
有没有别的方法可以达到这个目的?先谢谢你!

cpjpxq1n

cpjpxq1n1#

这对我很有效。

library(ggplot2)

base <- ggplot(economics, aes(date, psavert)) +
 geom_blank() + 
  labs(x="KG", y="%")

base + theme(axis.title.y = element_text(hjust = 1, size = 14), axis.title.x = element_text( hjust = 1, size = 14))

axis.title.y = element_text( hjust = .5)axis.title.x = element_text( hjust = .5)为默认值,将hjust更改为0将使轴文本位于坐标点(0,0)。

更新

要复制背景和箭头,可以执行以下操作:

# see ?ggplot2::arrow
arrow <- arrow(length = unit(0.5, "cm"), ends = "last", type = "closed")
# -------------------------------------------------------------------------

# A reproducible dataset from ggplot2 (you can use your own data set)
base <- ggplot(economics, aes(date, psavert)) +
  geom_blank() + 
  labs(x="Kg", y="%") +
  theme_bw() 
# -------------------------------------------------------------------------

# Add a theme layer removing boarder, grid lines and add the axes arrow 
base_bg <- base + theme(
    panel.border = element_blank(), panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    axis.line = element_line(arrow = arrow)
  )
# -------------------------------------------------------------------------

# finally position the axis title up to the arrow
base_bg + theme(axis.title.y = element_text(hjust = 1, size = 14, face="bold", family = "TT Times New Roman"), axis.title.x = element_text( hjust = 1, size = 14, face = "bold", family="Serif"))

输出

更新-纠正Y轴上的%

#see the addition of angle = 360 on axis.title.y
base_bg + theme(axis.title.y = element_text(hjust = 1, size = 14, face="bold", family = "TT Times New Roman", angle = 360), axis.title.x = element_text( hjust = 1, size = 14, face = "bold", family="Serif"))

输出-更正标签“%”

zyfwsgd6

zyfwsgd62#

尝试:

mop + theme(axis.text.x = element_text(margin=margin(1,2,3,4,"pt"),angle=0)

其中1,2,3,4表示 * 下、左、上、右 * 边距的度量

8yparm6h

8yparm6h3#

可以使用hjust沿着直线移动轴标签,最大值为1。

p + theme(axis.title.x = element_text(hjust = 1), axis.title.y = element_text(hjust = 1, angle = 0))

相关问题