如何缩短R语言ggplot生成图表的坐标轴标签字符串长度?
R语言ggplot坐标轴字符串缩短1个字符的实现方案
场景1:缩短坐标轴标题文本
如果需要裁剪坐标轴的标题(即x/y轴旁的说明文本),可以直接配合substr()函数裁剪字符串后传入labs()即可,示例代码如下:
library(ggplot2) # 以iris数据集为例,默认x轴标题为列名Sepal.Length,y轴为Petal.Width ggplot(iris, aes(x = Sepal.Length, y = Petal.Width)) + geom_point() + labs( # substr(字符串, 起始位置, 结束位置),nchar取字符串长度,减1即去掉最后1位 x = substr("Sepal.Length", 1, nchar("Sepal.Length") - 1), y = substr("Petal.Width", 1, nchar("Petal.Width") - 1) )
如果希望自动对映射的列名裁剪,不需要手动输入列名,可以用下面的写法:
p <- ggplot(iris, aes(x = Sepal.Length, y = Petal.Width)) + geom_point() # 自动获取默认x/y轴标题再裁剪 x_label <- substr(rlang::as_name(p$mapping$x), 1, nchar(rlang::as_name(p$mapping$x)) - 1) y_label <- substr(rlang::as_name(p$mapping$y), 1, nchar(rlang::as_name(p$mapping$y)) - 1) p + labs(x = x_label, y = y_label)
场景2:缩短坐标轴刻度文本
如果需要裁剪坐标轴上的每个刻度值文本,可在对应scale函数的labels参数传入匿名函数处理:
# 以mpg数据集的离散x轴为例 ggplot(mpg, aes(x = class, y = hwy)) + geom_boxplot() + scale_x_discrete( # 每个刻度字符串都去掉最后1位 labels = function(x) substr(x, 1, nchar(x) - 1) )
如果是连续轴的刻度,只需要把上面的scale_x_discrete换成scale_x_continuous即可,labels参数的用法完全一致。
内容的提问来源于stack exchange,提问作者Anh
相关产品推荐
相关产品推荐

