R:如何在轴的中间位置以外的其他位置绘制轴名称

时间:2019-08-26 14:00:26

标签: r ggplot2 graphics

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

graph with units

我唯一想到的R方法是添加一个文本对象,但是如果我想一起显示一些相似的图形,可能会导致对齐不一致。制作完图形后的编辑也似乎不太优雅,因为相同的编辑软件的字体(例如ppt编辑器)可能看起来与R中的相同字体不一样。

还有另一种方法可以实现这一目标吗?预先感谢!

3 个答案:

答案 0 :(得分:1)

这对我有用。

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_position

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"))

输出

axis_background_replicate

更新-在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"))

输出-标签'%'已更正

output_percent

答案 1 :(得分:0)

尝试:

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

其中1,2,3,4表示底部,左侧,顶部,右侧边距的测量值

答案 2 :(得分:0)

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

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