我正在寻找一种自动移动y轴刻度标签的方法,以便它们左对齐并出现在实际绘图区内。我喜欢ggplot主题组件的通用灵活性,但是在尝试找到一般方法时遇到了困难。
我知道给
例如,请考虑以下代码:
我认为它巧妙地将 y 轴标签 (例如 "某物的单位") 整合到了图表主体中,但为了实现这一点,必须手动找到最后一行中的 -3.1(通过试错),这让人倍感委屈:我不仅使用了负边距来拉动文本到它不想在的位置——还加入了一些神秘、脆弱、硬编码的魔幻数字。
有没有人知道我可以在哪里寻找更通用、更优雅的解决方案?
我知道给
axis.text.y
一个hjust=0
和负右边距(*恶心*)的组合可以实现这个效果,但是负边距必须手动设置以匹配最长y轴刻度标签的宽度。例如,请考虑以下代码:
library(ggplot2)
set.seed(0)
dat <- data.frame(x = 1:100, y = (1:100) + runif(100, -10, 10))
p1 <- ggplot(dat, aes(x, y)) +
geom_line() +
scale_y_continuous("", breaks = c(0, 30, 60, 90),
labels = c(0, 30, 60, "90 units of something")) +
theme(axis.text.y = element_text(hjust = 0,
margin = margin(0, -3.1, 0, 0, 'cm')))
我认为它巧妙地将 y 轴标签 (例如 "某物的单位") 整合到了图表主体中,但为了实现这一点,必须手动找到最后一行中的 -3.1(通过试错),这让人倍感委屈:我不仅使用了负边距来拉动文本到它不想在的位置——还加入了一些神秘、脆弱、硬编码的魔幻数字。
有没有人知道我可以在哪里寻找更通用、更优雅的解决方案?
ggplot(dat, aes(x, y)) + geom_line() + scale_y_continuous("", breaks=c(0, 30, 60, 90)) + annotate("text", x=-Inf, y=c(0, 30, 60, 90), label=c(0, 30, 60, "90个单位的某物"), hjust=0 )+ theme(axis.text.y = element_blank())
- user20650